为什么我们不能添加一个lambda作为属性参数呢?例如,我想这样做:
[MyAttribut(Transform= {object => object.ToSomethingElse()})]我应该理解C#中的lambda仅仅是闭包吗?
编辑:通过查看所有答案,让我准确地说出大多数人似乎不知道的一件事: Lambda是字面上的whish是编译时结构,除非它是一个闭包。
发布于 2012-06-08 23:06:40
属性的参数需要是编译时间常量。
来自MSDN - Attribute Parameter Types
传递给属性的
值必须是编译器在编译时知道的。
它们也仅限于以下类型:
发布于 2012-06-08 23:07:43
属性参数限制为以下类型的常量值:
object简单类型(bool、byte、char、short、int、long、float和double)
http://msdn.microsoft.com/en-us/library/aa288454%28VS.71%29.aspx
发布于 2014-10-01 23:56:37
虽然您不能直接执行此操作,但您可以在运行时更新属性。
请参阅我对问题Attribute Constructor With Lambda的回答。
有一个代码示例演示了这一想法。这是我用来从资源中获取显示名称的方法,而不必复制名称进行属性初始化。我仍然需要确保资源文件中名称匹配。为了确保它保持同步,你可以进行单元测试,或者你可以创建一个使用多个lambda(一个用于属性,另一个用于资源)进行映射的系统……
https://stackoverflow.com/questions/10951378
复制相似问题