2014-11-03 65 views
0

這可能是一個非常明顯的邏輯問題,但我似乎無法包裝我的頭爲什麼靜態成員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

回答

3

A const只能分配一個編譯時間文字。你不分配編譯時間文字,所以這沒有任何工作的機會。人們會希望得到不同的錯誤消息,但在這種情況下,您提供的代碼與編譯器期望的代碼相距甚遠,因此您不會收到很好的錯誤消息。正如您已經注意到的,解決方案是在這裏不使用const,而是使其成爲只讀字段。

+0

謝謝Servy。這就說得通了。 – ChocoPanda 2014-11-03 17:55:26