我目前正在处理属性。 我经常遇到错误“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式。” 我不太了解“常量表达式”的含义。
如果能够向属性传递Func<MyType,bool>
会非常有用(在属性存在时执行代码时使用)。但不幸的是,这不能实现。我不理解为什么该类型无法放置在程序集元数据中,我认为这就是我无法将其传递给属性的原因。
有人可以给我一些想法吗?
我目前正在处理属性。 我经常遇到错误“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式。” 我不太了解“常量表达式”的含义。
如果能够向属性传递Func<MyType,bool>
会非常有用(在属性存在时执行代码时使用)。但不幸的是,这不能实现。我不理解为什么该类型无法放置在程序集元数据中,我认为这就是我无法将其传递给属性的原因。
有人可以给我一些想法吗?
常量表达式是仅在编译时确定的值,包括其他常量表达式的字符串连接、算术运算等。
例如,"" 是一个常量表达式,但 String.Empty
不是。
String
是唯一支持非空常量表达式的引用类型。对于值类型,原始类型(int
等)和 decimal
支持常量表达式......虽然你不能在属性中使用 decimal
,因为它不是 CLR 中的原始类型。(你甚至不能指定 decimal
作为属性构造函数的参数类型。)
更多信息请参见 C# 4 规范的第7.19节。
Func<MyType, bool>
的概念放入你的类型实现的接口中,或者放入一个单独的处理程序类中,通过使用typeof(MyHandlerClass)
表达式传递给你的属性。
decimal
。更多信息请参见:https://learn.microsoft.com/en-us/dotnet/csharp/misc/cs0182 - tomwesolowski