Dlaczego słowniki nie zwracają tylko null
, gdy nieprawidłowy klucz jest używany do indeksowania kolekcji?nieprawidłowy klucz w słowniku
13
A
Odpowiedz
25
Ponieważ słowniki generyczne mogą zawierać instancje typu wartości, a wartość null nie jest ważny dla typu wartości. Na przykład:
var dict = new Dictionary<string, DateTime>();
DateTime date = dict["foo"]; // What should happen here? date cannot be null!
Należy zamiast tego użyć metody TryGetValue słownika:
var dict = new Dictionary<string, DateTime>();
DateTime date;
if (dict.TryGetValue("foo", out date)) {
// Key was present; date is set to the value in the dictionary.
} else {
// Key was not present; date is set to its default value.
}
również słownik, który przechowuje typów referencyjnych będzie nadal przechowywać wartości null. Twój kod może uważać "wartość jest pusta" za inną niż "klucz nie istnieje".
3
Firma Microsoft zdecydowała, że =)
Wykonaj kontrolę inline, aby tego uniknąć.
object myvalue = dict.ContainsKey(mykey) ? dict[mykey] : null;
5
3
Przyczyna praktyczna: ponieważ słownik może przechowywać wartość pustą. W swoim scenariuszu nie można odróżnić tej sprawy od wyjątku.
2
Powiązane problemy
- 1. Zdobądź największy klucz w słowniku
- 2. Nieprawidłowy błąd Nieprawidłowy klucz ładowania, '{'
- 3. cPickle.UnpicklingError: nieprawidłowy klucz obciążenia
- 4. Nieprawidłowy klucz prefiks MySQL
- 5. JSCH - Nieprawidłowy klucz prywatny
- 6. cPickle.UnpicklingError: nieprawidłowy klucz obciążenia, "".?
- 7. dany klucz nie był obecny w słowniku
- 8. referencyjny jako klucz w szybkim słowniku
- 9. Jak znaleźć minimalną klucz w słowniku
- 10. Scalanie klucz-wartość par w słowniku
- 11. Znajdź klucz zawierający ciąg w słowniku swift
- 12. Podany klucz nie był obecny w słowniku. Który klucz?
- 13. Jak zmodyfikować klucz w słowniku w języku C#
- 14. Wydrukuj klucz maksymalnej wartości w słowniku w pythonic sposób
- 15. Sprawdź, czy klucz istnieje w słowniku. Jeśli nie, dołącz to
- 16. Odwracanie kolejności par klucz-wartość w słowniku (Python)
- 17. Python sprawdza, czy klucz jest zdefiniowany w słowniku
- 18. Najlepszy sposób sprawdzenia, czy klucz istnieje w słowniku przed dodaniem?
- 19. Kraken API: Problemy z uwierzytelnianiem (nieprawidłowy klucz)
- 20. Nieprawidłowy klucz API dostarczony za pomocą Firebase
- 21. Klasa niestandardowa używana jako klucz w słowniku, ale klucz nie został znaleziony
- 22. Dodawanie do słownika w słowniku
- 23. python 2.7 obecność w słowniku
- 24. Python iterować po słowniku
- 25. C++ słowniku priorytet
- 26. Konwersja string w Słowniku pytona
- 27. Jak można iterować w słowniku w vb.net?
- 28. Przechowywanie ints w słowniku
- 29. underestimatedCount w Słowniku Swifta
- 30. Odczytywanie niestandardowych sekcji konfiguracji zwraca "Nieprawidłowy klucz wartości"
To naprawdę nie rozwiązać przyczynę decyzji projektowych; mogliby po prostu łatwo przywrócić 'default (DateTime)' zamiast wartości zerowej. – Extragorey
@Etradycyjne Tak, w szczególności ostatnie zdanie: niezależnie od wartości "nie znaleziono", być może trzeba zapisać tę wartość jako znaczącą. Jeśli pobranie klucza, który nie został znaleziony, zwraca 'default (DateTime)', wtedy nie można rozróżnić między "value is' default (DateTime) '" i "key is not present", przynajmniej bez dodatkowego wywołania do ' ContainsKey() '(co niepotrzebnie podwoiłoby koszt operacji). W przypadku słownika zawierającego typ odniesienia jako wartość, może "null" jest znaczącym stanem, z wyjątkiem "klucza nieobecnego". – cdhowie
Dzięki temu wyjaśnienie ma więcej sensu. – Extragorey