Вопрос по оператору `is`
Почему в примере ниже Foo1
возвращает true
, а Foo2
возвращает false
?
static bool Foo1<T>(T v) => v is var b;
static bool Foo2<T>(T v) => v is T b;
static void Main(string[] args)
{
int? i = null;
bool f1 = Foo1(i);
bool f2 = Foo2(i);
}
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
"Шаблон var
используется для сопоставления любого выражения, в том числе null
и назначения результата новой локальной переменной."
То есть фактически is var
всегда будет равен True
. Он ничего не проверяет, а просто создаёт временную переменную.
А во втором случае null
это не int
, поэтому будет False
. При сопоставлении x is T
, где T
- это конкретный тип, случай, когда x
- это null
, обрабатывается отдельно. null
не сопоставляется ни с каким конкретным типом, даже если этот тип Nullable
. В случае null
такое сопоставление не срабатывает и возвращается False
.