Это не связано напрямую. Как и вы, мне было любопытно другое поведение и спросил об этом. Это, вероятно, заставило @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». Так что он не жалуется на то, что переменная находится вне области видимости.