C#方法属性不能包含的lambda防爆pression? [英] C# Method Attribute cannot contain a Lambda Expression?

查看:107
本文介绍了C#方法属性不能包含的lambda防爆pression?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

智能感知告诉我的Ex pression不能包含匿名方法或lambda前pressions。真?我不知道这个强加的限制。它是否正确?我想我在寻找一个全面的检查在这里...

 
公共委托布尔酒吧(字符串s);[AttributeUsage(AttributeTargets.All)
公共类Foo:属性
{
    公共只读酒吧酒吧;    公共美孚(酒吧酒吧)
    {
        this.bar =栏;
    }
}公共类用法
{
    [美孚(B =>乙==的Hello World!)] //智能感知这里诉说
    公众使用()
    {
    }
}


解决方案

是的,这是正确的。属性值被限制为以下类型的常量


  • 简单类型(BOOL,BYTE,CHAR,short,int和长,float和双)

  • 字符串

  • 的System.Type

  • 枚举

  • 对象(的参数类型对象的属性参数必须是上述类型之一的恒定值。)

  • 上述任何类型的一维阵列

参考:<一href=\"http://msdn.microsoft.com/en-us/library/aa288454%28VS.71%29.aspx\">http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx

IntelliSense is telling me "Expression cannot contain anonymous methods or lambda expressions." Really? I was not aware of this imposed limitation. Is this correct? I guess I'm looking for a sanity check here...


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()
    {
    }
}

解决方案

Yes this is correct. Attribute values are limited to constants of the following types

  • Simple types (bool, byte, char, short, int, long, float, and double)
  • string
  • System.Type
  • enums
  • object (The argument to an attribute parameter of type object must be a constant value of one of the above types.)
  • One-dimensional arrays of any of the above types

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

这篇关于C#方法属性不能包含的lambda防爆pression?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆