Я только что прочитал SO post, в котором объясняется, что тип возврата FirstOrDefault()
будет меняться в зависимости от значения выбранного элемента.FirstOrDefault Поведение с Int и Int?
Пример:
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
.
Ваш вопрос непонятен, мне. Какой именно код компилируется без предупреждения, где вы ожидали ошибки/предупреждения? Правильно, что значение defalt для 'int' равно' 0', а значение 'int?' - 'null'. –
Hi @JeppeStigNielsen - я был смущен, почему компилятор для примера «int?» Выше дал бы мне использовать тип Nullable, даже если «null» никогда не будет возвращен. 'dasblinkenlight' полностью ответил на мой вопрос. –