C#方法属性不能包含Lambda表达式?

时间:2010-12-10 16:39:58

标签: c# lambda attributes

IntelliSense告诉我“Expression不能包含匿名方法或lambda表达式。”真?我不知道这个强加的限制。它是否正确?我想我正在寻找一个健全检查......


public delegate bool Bar(string s);

[AttributeUsage(AttributeTargets.All)]
public class Foo : Attribute
{
    public readonly Bar bar;

    public Foo(Bar bar)
    {
        this.bar = bar;
    }
}

public class Usage
{
    [Foo(b => b == "Hello World!")]        // IntelliSense Complains here
    public Usage()
    {
    }
}

1 个答案:

答案 0 :(得分:28)

是的,这是正确的。属性值仅限于以下类型的常量

  • 简单类型(bool,byte,char,short,int,long,float和double)
  • 字符串
  • 的System.Type
  • 枚举
  • object(对象类型的属性参数的参数必须是上述类型之一的常量值。)
  • 任何上述类型的一维阵列

参考:http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx