Я только что прочитал SO пост, что объясняется, что FirstOrDefault()
тип возвращаемого будет варьироваться в зависимости от значения элемента выбран.
Пример:
ICollection<String> list = new List<String>();
list.Add("bye");
int a = (from x in list where (x == "hi") select x.Length).FirstOrDefault();
В этом примере a
будет равно 0, так как значение по умолчанию int
равно 0.
Тем не менее, я могу добавить .Cast<int?>()
соответствии с уже связанным сообщением, чтобы получить null
когда запрос возвращает 0 результатов.
int? a = (from x in list where ... x.Length).Cast<int?>().FirstOrDefault();
Почему бы мне не получить ошибку времени компиляции (или хотя бы предупреждение), когда для моего первого примера я использую Nullable int (int?
), А не обычный int
?
Если я правильно понимаю, используя int?
при выполнении моего первого запроса никогда не приведет к значению null
.