Podczas wysyłania zapytania do listy liczb dodatnich za pomocą SingleOrDefault()
, w jaki sposób mogę zwrócić wartość null, lub niestandardową wartość, np. -1, gdy numer nie znajduje się na liście, zamiast wartości domyślnej typu (w tym przypadku 0)?Jak zwrócić wartość null, jeśli używamy SingleOrDefault() i szukamy listy liczb dla numeru, którego nie ma na liście?
Odpowiedz
Należy zmienić typ na liście na int?
(dopuszczalna wartość n). Domyślna wartość, którą zwrócisz, będzie równa 0 dla liczby całkowitej. Dla typów referencyjnych będzie to zero. Bez przeciążenia metody nie można ustawić domyślnej wartości wycofania jako wartości custome.
To prawda; możesz zmodyfikować zapytanie jako całość (w dość prosty sposób), aby osiągnąć ten cel. To ogólnie nie jest problem niemożliwy. – Servy
Można użyć:
var first = theIntegers
.Cast<int?>()
.SingleOrDefault(i => i == theValue) ?? valueIfNotFound;
To działa poprzez odlewanie elementów do Nullable<int>
, a następnie za pomocą null-coalescing operator aby zwrócić wartość wybrać, czy null
został zwrócony (czyli: nie stwierdzono).
Uwaga: zostanie to rzucone, jeśli masz więcej pasujących elementów. Jeśli nie chcesz tego zachowania, użyj FirstOrDefault
zamiast SingleOrDefault
.
@Servy Zakładam, że OP nie omyłkowo używa tego zamiast "FirstOrDefault", że były już pewne błędne odpowiedzi dotyczące wyboru metody. – evanmcdonnal
@evanmcdonnal Mój komentarz był bezpośredni w Reed, który powiedział, że 'SingleOrDefault' zwróci wartość domyślną w przypadku 2 pozycji na liście; od tego czasu zredagował swoją odpowiedź. Zakładam, że OP wiedział, co robi, kiedy zdecyduje się użyć "Single". – Servy
@Servy Tak, naprawiałem to - pomieszane podczas pisania;) (teraz poprawione) –
Można użyć DefaultIfEmpty
określić wartość zwyczaj domyślną dla pustego zbioru:
var value = numbers.Where(MyFilter)
.DefaultIfEmpty(-1) //or any other default value you want
.Single(); //OrDefault not needed; DefaultIfEmpty ensures there is an item
Niekoniecznie * dowolna * inna wartość. Na przykład, ** null **, rzuci wyjątek. –
@TravisJ Dowolna wartość tego typu. Nie można określić wartości innego typu całkowicie, to jest poprawne. Aha, a jeśli wartość, jeśli nie jest właściwego typu, nie rzuci wyjątku; zamiast tego * nie będzie kompilować *. – Servy
Może twoja sprawa jest uproszczona tak to nie ma zastosowania, ale jeśli tylko szukasz numeru, który już znamy i chce wrócić dowolną liczbę, jeśli nie jest na liście, można użyć metody Any-extension:
int numberToLookFor = 42;
int arbitraryReturnOnNotFound = 17;
int result = numbers.Any(n => n == numberToLookFor) ? numberToLookFor : arbitraryReturnIfNotFound;
- 1. Jak zwrócić pusty ciąg znaków, jeśli obiekt ma wartość NULL?
- 2. Jak sprawdzić, czy nie ma na liście [Opcja [_]] i zwrócić nazwę elementu?
- 3. SyndicationItem.Content ma wartość Null
- 4. Zapobieganie wykonywaniu metody Action MVC, jeśli parametr ma wartość null
- 5. Linq: jak wykluczyć warunek, jeśli parametr ma wartość null
- 6. GooglePlayServicesUtil.getErrorDialog ma wartość null
- 7. EventHandler ma wartość null
- 8. getLaunchIntentForPackage ma wartość null dla niektórych aplikacji
- 9. HttpContext.Current.Request.UserHostAddress ma wartość null
- 10. document.currentScript ma wartość null
- 11. SQL ignoruje część WHERE, jeśli parametr ma wartość null
- 12. Usuń pozycje z listy 1 nie ma na liście 2
- 13. HttpContext ma wartość null dla kontrolera MVC
- 14. Jak uprościć zagnieżdżanie - jeśli używasz, aby zwrócić wartość w Haskell
- 15. AnonymousId ma zawsze wartość null
- 16. iframe contentDocument i contentWindow ma wartość null
- 17. SIGNALR HttpContext.Current ma wartość null
- 18. C# - IComparer - Jeśli datetime ma wartość null, należy posortować ją na dół, nie na górę
- 19. HttpContext.Current.Session ma wartość null + OWIN
- 20. Zręczny - filtruj wiersz, jeśli kolumna ma wartość Null
- 21. zapytań SQL jeśli parametr ma wartość null zaznaczyć wszystkie
- 22. Jak mogę zwrócić wartość domyślną dla atrybutu?
- 23. Konwersja ciągu na int. Ustaw wartość równą 0, jeśli String ma wartość null
- 24. Usuń NULL element i wyświetlać na liście listy poziomie lokalnym z zagnieżdżonej listy w R
- 25. ProviderTestCase2.getProvider() ma wartość null
- 26. Serwer SQL: jeśli @variable ma wartość null, ustaw @ variable = x
- 27. Optymalizacja funkcji SingleOrDefault LINQ
- 28. UPDATE jeśli kolumna nie jest null, jeśli wartość null następnie pozostawić na zerową
- 29. GROUP_CONCAT zwraca wartość NULL, jeśli wartość jest NULL
- 30. Jak znaleźć numery, których nie ma na liście?
nie można zmienić zachowanie SingleOrDefault będzie alwyays powrócić domyślnego obiektu, w przypadku wystąpienia int, 0, w przypadku int? -> null. Wykonaj jedno z poniższych podejść, aby je obejść;) – MichaC
@Ela Rozumiem to. Celem mojego pytania było obejście tego. –