2010-12-10 61 views
23

智能感知告訴我「表達式不能包含匿名方法或lambda表達式。」真?我不知道這個強加的限制。它是否正確?我想我在這裏尋找理智檢查...C#方法屬性不能包含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() 
    { 
    } 
} 
+3

我很好奇你會期望這樣做。 – FrustratedWithFormsDesigner 2010-12-10 16:42:11

+2

我的目的只是爲了某些配置目的而允許一個簡單的映射。 – Didaxis 2010-12-10 16:45:48

+0

在這個例子中,什麼會映射到什麼? 'Usage'方法會映射到'Foo'屬性中的lambda? lambda何時執行?這並不清楚,但這可能是一個有趣的想法...... – FrustratedWithFormsDesigner 2010-12-10 16:55:48

回答

27

是的,這是正確的。屬性值被限制爲以下類型的

  • 簡單類型(布爾,字節,字符,短,整型,長整型,浮點,雙)
  • 的System.Type
  • 枚舉常數
  • 對象(的參數類型的對象的屬性參數必須是上述類型之一的恆定值。)上述任何類型的
  • 一維陣列

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

+6

謝謝。這太糟糕了。 – Didaxis 2010-12-10 16:44:51

+0

呃。在那裏,我想我終於想出了一個解決方案,我發現INotifyPropertyChanged可以接受。好吧,回到製圖板。 – tobriand 2015-03-29 21:50:09