У меня есть следующий код:Почему C# проверяет, имеет ли значение 'var' значение null?
List<IMessage> messageList = new List<IMessage>();
foreach(var msg in messageList)
{
if(msg != null)
{
}
}
Как это можно проверить var
Сообщи против null
? Что говорит компилятору, что var
- это IMessage
, а не int
или какой-либо другой тип, который не может быть обнулен?
Если вы посмотрите на пример выше на MSDN, они дают неявно введенные переменные начальные значения (при этом объявление становится явным). В моем случае я даже не придаю ему значения, но у компилятора нет проблем с ним. Как компилятор знает, что msg
имеет значение NULL?
Ваш 'messageList' - это список элементов типа' IMessage', поэтому компилятор может легко определить, что фактический тип 'msg' -' IMessage'. Если компилятор не мог вывести тип, вы не сможете использовать 'var' - например. 'var msg;' не будет разрешено. – stuartd
В любом случае сравнение значения с 'null' всегда допустимо. Компилятор просто выдает предупреждение, если 'msg' был' int', так как сравнение всегда 'true', но это не было бы запрещено. –
@JeroenMostert Когда я проверяю «null» на тип значения, я получаю больше, чем предупреждение. Не уверен, что вы говорите. – Snoopy