2010-12-10 13 views
23

IntelliSense me dice "Expression no puede contener métodos anónimos o expresiones lambda". De Verdad? No estaba al tanto de esta limitación impuesta. ¿Es esto correcto? Supongo que estoy buscando un control de cordura aquí ...C# Método ¿El atributo no puede contener una expresión 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

Tengo curiosidad sobre lo que usted esperaría que hiciera. – FrustratedWithFormsDesigner

+2

Mi intención era solo permitir una asignación simple para algunos propósitos de configuración. – Didaxis

+0

En este ejemplo, ¿qué se mapearía a qué? ¿El método 'Usage' se correlacionaría con el lambda en el atributo' Foo'? ¿Cuándo se ejecutará la lambda? No está claro para mí, pero esta podría ser una idea interesante ... – FrustratedWithFormsDesigner

Respuesta

27

Sí, esto es correcto. Los valores de atributo se limitan a las constantes de los siguientes tipos

  • tipos simples (bool, byte, char, short, int, long, float, y dobles)
  • cadena
  • System.Type
  • enumeraciones
  • objeto (el argumento a un parámetro de atributo de tipo de objeto debe ser un valor constante de uno de los tipos anteriores.)
  • arrays
  • unidimensional de cualquiera de los tipos anteriores

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

+6

gracias. Eso es un fastidio – Didaxis

+0

Meh. Y allí estaba pensando que finalmente llegaría a una solución que me pareció aceptable para INotifyPropertyChanged. Ah, bueno, volviendo a la mesa de dibujo. – tobriand

Cuestiones relacionadas