Поделиться через


Ошибка компилятора CS0837

Обновлен: Ноябрь 2007

Сообщение об ошибке

Первый операнд оператора "is" или "as" не может быть лямбда-выражением или анонимным методом.
The first operand of an "is" or "as" operator may not be a lambda expression or anonymous method.

Лямбда-выражения и анонимные методы нельзя использовать слева от оператора is или as.

Исправление ошибки

  • Если ошибка возникает с оператором is, то следует помнить, что is принимает значение и тип, и сообщает можно ли это значение перевести в тип путем ссылки, упаковки-преобразования или распаковки-преобразования. Так как лямбда-выражения не являются значениями и не имеют ссылки, распаковки-преобразования или упаковки-преобразования, они не могут быть кандидатами для is.

  • Если в коде неверно используется as, то исправить ошибку можно попробовать приведением.

Пример

Следующий пример приводит к возникновению ошибки 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;
        }
    }
}