【问题标题】:C# Method Attribute cannot contain a Lambda Expression?C# 方法属性不能包含 Lambda 表达式?
【发布时间】:2010-12-10 16:39:58
【问题描述】:

IntelliSense 告诉我“表达式不能包含匿名方法或 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()
    {
    }
}

【问题讨论】:

  • 我很好奇你会期望这样做。
  • 我的意图只是为了一些配置目的允许一个简单的映射。
  • 在这个例子中,什么会映射到什么? Usage 方法是否会映射到 Foo 属性中的 lambda? lambda 什么时候执行?我不清楚,但这可能是一个有趣的想法......
  • 嗯,我真的只是在为 DI 方案设计一些想法的原型(不,不幸的是我不能使用 Ninject),所以这只是我正在探索的一个想法。我遇到了 IntelliSense 问题,我完全没有意识到这个限制。不过没什么大不了的,配置只需要驻留在其他地方

标签: c# lambda attributes


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。这有点令人沮丧。
  • 嗯。我在想我终于想出了一个我认为 INotifyPropertyChanged 可以接受的解决方案。好吧,回到绘图板。
  • 链接失效
猜你喜欢
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
相关资源
最近更新 更多