Я только что прочитал 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.