Dav*_*vid 4 c# custom-attributes constant-expression
我目前正在使用属性.我经常遇到错误'属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式.我真的不知道"常量表达"是什么意思.
能够将a传递Func<MyType, bool>给属性(由属性存在时执行的代码所使用)将非常有用.但是,唉,没有.我不明白为什么这种类型不能放在程序集元数据中,我认为这是我无法将其传递给属性的原因.
谁能给我任何想法?
常量表达式是仅在编译时确定的值,包括其他常量表达式的字符串连接,算术等.
所以例如""是一个常量表达式,但String.Empty不是.
String是唯一支持非null常量表达式的引用类型.对于值类型,基元类型(int等)和decimal支持常量表达式...虽然您不能decimal在属性中使用,因为它不是CLR中的原语.(您甚至无法decimal在属性构造函数中指定为参数类型.)
有关详细信息,请参阅C#4规范的第7.19节.
编译器需要能够在编译时创建属性,因为它们与实际数据一起嵌入到程序集中(它们由编译器实例化并序列化到输出文件中)。这就是为什么你需要一个常量表达式。
基本上您可以使用所有基本数据类型(如int、bool等string)。您还可以使用typeof表达式,因为它们将解析为标识类型的元数据标记,这在编译时很好。
也许您可以将您的概念Func<MyType, bool>放入您的类型实现的接口中。或者进入一个单独的处理程序类,您可以使用表达式将其传递给您的属性typeof(MyHandlerClass)。
| 归档时间: |
|
| 查看次数: |
5534 次 |
| 最近记录: |