首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性参数中的Lambda

属性参数中的Lambda
EN

Stack Overflow用户
提问于 2012-06-08 23:04:24
回答 3查看 1.9K关注 0票数 4

为什么我们不能添加一个lambda作为属性参数呢?例如,我想这样做:

代码语言:javascript
复制
[MyAttribut(Transform= {object => object.ToSomethingElse()})]

我应该理解C#中的lambda仅仅是闭包吗?

编辑:通过查看所有答案,让我准确地说出大多数人似乎不知道的一件事: Lambda是字面上的whish是编译时结构,除非它是一个闭包。

EN

回答 3

Stack Overflow用户

发布于 2012-06-08 23:06:40

属性的参数需要是编译时间常量。

来自MSDN - Attribute Parameter Types

传递给属性的

值必须是编译器在编译时知道的。

它们也仅限于以下类型:

  • bool
  • char,unsigned long
  • __int64,
  • short,unsigned short
  • int,unsigned int
  • long,unsigned char unsigned char or wchar_t* or System::String*
  • System::Type ^
  • System::Object ^
  • enum
票数 4
EN

Stack Overflow用户

发布于 2012-06-08 23:07:43

属性参数限制为以下类型的常量值:

object简单类型(bool、byte、char、short、int、long、float和double)

  • string

  • System.Type

  • enums

  • object )(object类型的属性参数的实参必须是上述任意类型的types.)

  • One-dimensional数组中的一个常量值

http://msdn.microsoft.com/en-us/library/aa288454%28VS.71%29.aspx

票数 4
EN

Stack Overflow用户

发布于 2014-10-01 23:56:37

虽然您不能直接执行此操作,但您可以在运行时更新属性。

请参阅我对问题Attribute Constructor With Lambda的回答。

有一个代码示例演示了这一想法。这是我用来从资源中获取显示名称的方法,而不必复制名称进行属性初始化。我仍然需要确保资源文件中名称匹配。为了确保它保持同步,你可以进行单元测试,或者你可以创建一个使用多个lambda(一个用于属性,另一个用于资源)进行映射的系统……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10951378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档