我正在處理屬性。我經常遇到錯誤'屬性參數必須是常量表達式,類型表達式或屬性參數類型的數組創建表達式'。我真的不知道「常量表達」的含義。c#:什麼是常量表達式?
如果能夠將Func<MyType, bool>
傳遞給屬性(由屬性存在時執行的代碼使用)將會非常有用。但是,唉,不。我不明白爲什麼這種類型不能放入程序集元數據中,我認爲這是我無法將它傳遞給屬性的原因。
誰能給我任何想法?
我正在處理屬性。我經常遇到錯誤'屬性參數必須是常量表達式,類型表達式或屬性參數類型的數組創建表達式'。我真的不知道「常量表達」的含義。c#:什麼是常量表達式?
如果能夠將Func<MyType, bool>
傳遞給屬性(由屬性存在時執行的代碼使用)將會非常有用。但是,唉,不。我不明白爲什麼這種類型不能放入程序集元數據中,我認爲這是我無法將它傳遞給屬性的原因。
誰能給我任何想法?
編譯器需要能夠創建在編譯時的屬性,因爲它們嵌入在裝配與他們的實際數據(它們是由編譯器實例化和序列化到輸出文件)。這就是爲什麼你需要一個不斷的表達。
基本上你可以使用所有的基本數據類型(如int
,bool
,string
等)。您還可以使用typeof
表達式,因爲它們將被解析爲標識類型的元數據令牌,這在編譯時很正常。
也許你可以把你的Func<MyType, bool>
的理念融入到你的類型實現的接口。或者通過使用typeof(MyHandlerClass)
表達式將其傳遞給屬性的單獨處理程序類中。
感謝您一個非常有趣的環節。 – David
常量表達式是一個n表達式,可以在編譯時進行充分評估。
http://msdn.microsoft.com/en-us/library/aa691319(v=vs.71).aspx(舊文章,但仍然有效)
常量表達式的值在編譯時書確定,包括其他常量表達式的字符串連接,算術等
因此,例如,「」是一個常量表達式,但String.Empty
不是。
String
是唯一的參考類型以支持一個非空的常量表達式。對於值類型,原始類型(int
等)和decimal
支持常量表達式......雖然你不能在屬性使用decimal
,因爲它不是在CLR原始。 (您甚至不能在屬性構造函數中指定decimal
作爲參數類型。)
有關更多信息,請參閱C#4規範的第7.19節。
不允許使用「decimal」。更多在這裏:https://docs.microsoft。com/en-us/dotnet/csharp/misc/cs0182 – tomwesolowski
@tomwesolowski:已編輯,儘管說出您所指的內容會有幫助。 –
這基本上是一個代表,我在下面建議。 – Styxxy