2010-12-10 15 views
23

IntelliSense mówi mi "Wyrażenie nie może zawierać metod anonimowych ani wyrażeń lambda". Naprawdę? Nie zdawałem sobie sprawy z tego narzuconego ograniczenia. Czy to jest poprawne? Chyba szukam tutaj testu poprawności ...Atrybut Metoda C# nie może zawierać wyrażenia 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

Jestem ciekawy, czego można by się spodziewać. – FrustratedWithFormsDesigner

+2

Moim zamiarem było umożliwienie prostego mapowania dla niektórych celów konfiguracji. – Didaxis

+0

W tym przykładzie, co zostanie zmapowane do czego? Czy metoda 'Usage' zostanie przypisana do lambda w atrybucie' Foo'? Kiedy wykona lambda? Nie jest dla mnie jasne, ale może to być ciekawy pomysł ... – FrustratedWithFormsDesigner

Odpowiedz

27

Tak, to prawda. Wartości atrybutów są ograniczone do stałych następujących typów

  • Proste typy (bool, byte, char, short, int, long, float, i podwójne)
  • smyczkowych
  • System.Type
  • teksty stałe
  • obiektu (argument parametru atrybutu typu obiektu musi być stała wartość jednego z trzech wymienionych wyżej).
  • jednowymiarowe matryce dowolnych z powyższych typów

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

+6

Dzięki. To trochę niedorzeczne. – Didaxis

+0

Meh. I pomyślałem, że w końcu wymyślę rozwiązanie, które uznałem za dopuszczalne dla INotifyPropertyChanged. No cóż, wracam do deski kreślarskiej. – tobriand

Powiązane problemy