Это не связано напрямую. Как и вы, мне было любопытно другое поведение и спросил об этом. Это, вероятно, заставило @gafter понять, что существует проблема, когда шаблон всегда совпадает, поэтому он поднял проблему.

аюсь понять почемуy находится в области видимости в следующем примере:

static void Main(string[] args)
{
    int x = 1;
    if (x is int y) { }

    Console.WriteLine("This should NOT be in scope:" + y); // but it is...
}

Если я изменюint x вobject x, затемy больше не в области (как и ожидалось).

Почемуy в области, когда сопоставляемое выражение имеетint тип, а не когда типobject? Странно, что область видимости меняется в зависимости от типа выражения.

y кажется, остается в области, когда тип выражения и тип шаблона одинаковы, и они обатипы значений, (Та же проблема существует, когда оба типаDateTime, но не существует, когда они обаstring).

(версия csc 2.0.0.61213.)

Обновить: Это выглядит какy находится в сфере применения в обоих случаях. вobject В этом случае ошибка компилятора - «Использование неназначенной локальной переменной y». Так что он не жалуется на то, что переменная находится вне области видимости.

Ответы на вопрос(2)

Ваш ответ на вопрос