Číst v angličtině

Sdílet prostřednictvím


Chyba kompilátoru CS0837

Prvním operandem operátoru is nebo as nemusí být výraz lambda, anonymní metoda nebo skupina metod.

Výrazy lambda, anonymní metody a skupiny metod nemusí být použity na levé straně je nebo jako.

Oprava této chyby

  • Pokud chyba zahrnuje operátor, mějte na is paměti, že is vezme hodnotu a typ a řekne vám, zda je možné tuto hodnotu do daného typu vytvořit pomocí odkazu, boxingu nebo rozbalení převodu. Vzhledem k tomu, že lambda nejsou hodnoty a nemají žádný odkaz, boxing nebo rozbalení převodů, lambda nejsou kandidáty pro is.

  • Pokud kód zneužije as, oprava ji pravděpodobně změní na přetypování.

Příklad

Následující příklad vygeneruje 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;
        }
    }
}