Вопрос по оператору `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.