Error del compilador CS0837

Actualización: noviembre 2007

Mensaje de error

El primer operando de un operador "is" o "as" no puede ser una expresión lambda ni un método anónimo.
The first operand of an "is" or "as" operator may not be a lambda expression or anonymous method.

Las expresiones lambda y los métodos anónimos no se pueden utilizar en la parte izquierda de un operador is o as.

Para corregir este error

  • Si el error implica al operador is, recuerde que is acepta un valor y un tipo y le indica si el valor puede convertirse en ese tipo mediante una referencia, conversión boxing o unboxing. Dado que las expresiones lambda no son valores y no tienen referencias ni conversiones boxing o unboxing, no son elementos candidatos para is.

  • Si se produce un uso incorrecto de as en el código, probablemente la solución sea cambiarlo a una conversión.

Ejemplo

El ejemplo siguiente genera el error CS0837:

// cs0837.cs
namespace TestNamespace
{
    public delegate void Del();

    class Test
    {
        static int Main()
        {
            bool b1 = (() => { }) is Del;   // CS0837
            bool b2 = delegate() { } is Del;// CS0837
            Del d1 = () => { } as Del;      // CS0837
            Del d2 = delegate() { } as Del; // CS0837
            return 1;
        }
    }
}