Właśnie przeczytałem SO post, który wyjaśnił, że typ zwracany przez FirstOrDefault()
będzie się różnić w zależności od wartości wybranego elementu.FirstOrDefault Behavior with Int i Int?
przykład:
ICollection<String> list = new List<String>();
list.Add("bye");
int a = (from x in list where (x == "hi") select x.Length).FirstOrDefault();
W tym przykładzie a
będzie równe 0, ponieważ wartość domyślna int
0.
Jednakże można dodać .Cast<int?>()
jak na już związanego stanowiskach w celu get null
, gdy zapytanie zwróci 0 wyników.
int? a = (from x in list where ... x.Length).Cast<int?>().FirstOrDefault();
Dlaczego nie pojawia się błąd kompilacji (lub przynajmniej ostrzeżenie), gdy na moim pierwszym przykładzie mogę używać pustych int (int?
) zamiast regularnej int
?
Jeśli dobrze rozumiem, używając int?
podczas wykonywania mój pierwszy kwerenda będzie nigdy doprowadzić do wartości null
.
Twoje pytanie nie jest dla mnie jasne. Jaki dokładnie kod kompiluje bez ostrzeżenia, gdzie spodziewano się błędu/ostrzeżenia? Prawdą jest, że wartość defalt dla 'int' wynosi' 0', a wartość 'int?' To 'null'. –
Hi @JeppeStigNielsen - Byłem zdezorientowany, dlaczego kompilator, dla powyższego przykładu "int?", Pozwoliłby mi użyć typu Nullable, chociaż 'null' nigdy nie zostanie zwrócony. 'dasblinkenlight' w pełni odpowiedział na moje pytanie. –