22 votos

¿Atributo de método de C# no puede contener una expresión Lambda?

IntelliSense me dice que "La expresión no puede contener métodos anónimos o expresiones lambda". ¿De veras? No era consciente de esta limitación impuesta. ¿Es esto correcto? Supongo que estoy buscando un cheque de cordura aquí...


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

26voto

JaredPar Puntos 333733

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

  • Los tipos simples (bool, byte, char, short, int, long, float y double)
  • cadena
  • Sistema.Tipo de
  • las enumeraciones
  • objeto (El argumento a un atributo del parámetro de tipo de objeto debe ser un valor constante de uno de los tipos anteriores.)
  • Arrays de una dimensión de cualquiera de los tipos anteriores

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X