Errore del compilatore CS0837

Aggiornamento: novembre 2007

Messaggio di errore

Il primo operando di un operatore "is" o "as" non può essere un'espressione lambda o un metodo anonimo.
The first operand of an "is" or "as" operator may not be a lambda expression or anonymous method.

Le espressioni lambda e i metodi anonimi non possono essere utilizzati sul lato sinistro di is o as.

Per correggere l'errore

  • Se l'errore riguarda l'operatore is, ricordare che is accetta un valore e un tipo e indica se il valore può essere assegnato a quel tipo da un riferimento, una conversione boxing o una conversione unboxing. Le espressioni lambda non sono valori e non hanno riferimenti, conversioni boxing o unboxing, pertanto non sono adatte per is.

  • Se il codice utilizza erroneamente as, la correzione probabilmente è l'impostazione su un cast.

Esempio

Nell'esempio seguente viene generato l'errore 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;
        }
    }
}