静态成员不存在const func

问题描述:

这可能是一个非常明显的逻辑问题,但我似乎无法包装我的头为什么静态成员Char.ToUpper(char)应该停止在下面的代码中存在。静态成员不存在const func <T,T>

private const Func<Enum, string> getString = vdEnum => 
    { 
     var str = vdEnum.ToString().ToLower().ToCharArray(); 
     str[0] = Char.ToUpper(str[0]); 
     return new string(str); 
    }; 

我的代码是功能齐全,工作正常,我应该声明本功能是类的“静态只读”的成员,但是我将不胜感激常量的解释,这将有助于我理解为什么上面的代码应该不在VS 2013中编译,因为错误:

"Cannot resolve symbol 'ToUpper'

然而,当我将此func更改为“静态只读”它编译罚款?

非常感谢您提供的任何帮助。

+0

为什么不使用扩展方法? – ja72 2014-11-03 17:47:42

+0

@ ja72大概是因为无论他在做什么,他都需要一个委托,而不是一个静态方法。 – Servy 2014-11-03 17:49:10

+0

@ ja72我在这里错过的是Linq语句不是编译时文字,所以Char的静态扩展并不能解决问题。 – ChocoPanda 2014-11-03 18:02:58

A const只能分配一个编译时间文字。你不分配编译时间文字,所以这没有任何工作的机会。人们会希望得到不同的错误消息,但在这种情况下,您提供的代码与编译器期望的代码相距甚远,因此您不会收到很好的错误消息。正如您已经注意到的,解决方案是在这里不使用const,而是使其成为只读字段。

+0

谢谢Servy。这就说得通了。 – ChocoPanda 2014-11-03 17:55:26