답변
여기는 answer입니다.
는사전 가 발생 주된 이유는 해시 테이블 키는 항상 참조 타입이기 때문에 null을 반환 할 수있는 V. 이상 작동에는 "오류" 가치가 없다는 것입니다.
주목할만한 점 :'HashTable'은 이런 식으로 비표준 코드를 쓸 수있게합니다. 'var ht = new Hashtable() {{ "A", null}}; 문자열 aVal = (문자열) ht [ "A"]; string bVal = (string) ht [ "B"];'모두 null을 반환하면 유효한 값이나 존재하지 않는 키를 구별 할 수 없습니다. 적어도 버그는 숨겨져 있으며 침묵은 더욱 심각합니다. 사전은 예외를 알려줍니다. –
사전 [key]의 값이 null 값을 저장할 때와 키가 존재하지 않을 때 사이에 모호성이 없습니다. Hashtable [key]는 null을 저장하거나 키가 존재하지 않으면 null을 반환합니다.
사전이 던지는 주된 이유는 정치적입니다. 효율성과 사용 편의성을 유지하는 몇 가지 옵션이있었습니다. 실제적으로 합리적인 가치를 반환하는 "무능력"에 대한 주장이 거짓임을 분명히 보여주는 방법 (TryGetValue)을 제공합니다. 그러나 TryGetValue는 뚜렷하게 어색한 구문을 사용하여 인덱서가 쉽게 수행 할 수있는 작업을 수행합니다.
C# 템플릿은 참조 및 값 의미에 대해 별도의 구현을 구성하는 쉬운 방법을 제공하며 tempante 및 일부 연산자 (기본값 및 nullable)가 사용하는 값 의미가있는 누락 된 개체를 완벽하게 처리하는 두 가지 기능이 있습니다. 해쉬 테이블의 의미를 깨뜨릴 합리적인 이유가 없다는 것을 의미합니다.
모든 사람이 수표를 가지고 가야한다는 콜렉션의 학술적 개념과 그러한 인공 절차가 비효율적이며 실 안전성을 깨뜨리는 실제적인 사실 사이의 정치적 투쟁은 오랜 기간입니다 (액세스가 비 원자 (non-atomic)로 만들어서 안전하지 않은 구현의 스레드 안전성을 손상시킵니다.
'TryXX' 패턴은 실패했을 때 메소드가'default (T)'를 반환하지만'out bool' 파라미터를 사용하여 그것이 작동했는지 여부를 나타 내기를 희망합니다. 이것은'book ok; var theValue = myDict.TryGetValue (myKey, out ok); if (ok) ...'. 그러한 패턴은 형식 유추와 공분산을 허용 할뿐만 아니라, 존재하지 않는 키에 대해 원하는 동작이'default (T)'값을 갖는 경우를 용이하게합니다. – supercat
- 1. C++의 Dictionary/HashTable?
- 2. XML Deserilzation이 예외를 throw하지 않는 이유는 무엇입니까
- 3. 사용할 수있는 컬렉션 클래스 : Hashtable 또는 Dictionary?
- 4. 0.0으로 나누면 Java가 예외를 throw하지 않는 이유는 무엇입니까?
- 5. JPA EntityManager 쿼리에서 NoResultException을 throw하지만 찾을 수없는 이유는 무엇입니까?
- 6. Z-Index가 IE7에서 작동하지 않습니다.
- 7. Dictionary
- 8. 닫힌 연결 (처음)에 쓸 때 TcpClient.Write가 예외를 throw하지 않는 이유는 무엇입니까?
- 9. XmlDocument 유효성 검사가 다른 네임 스페이스가있는 xml에 예외를 throw하지 않는 이유는 무엇입니까?
- 10. DROP INDEX가 끝나지 않음
- 11. C# Hashtable 대 인덱서 추가 - 두 가지 이유는 무엇입니까?
- 12. onSaveInstanceState()에서 비 Parcelable 객체의 Hashtable 저장이 작동하는 이유는 무엇입니까?
- 13. Java의 Hashtable get 메소드가 Object를 매개 변수로 사용하는 이유는 무엇입니까?
- 14. Lucene.Net Index가 폴더에 있는지 확인하는 방법은 무엇입니까?
- 15. 내 COM 구성 요소가 OutOfMemoryException을 throw하지만 VB6에서 제대로 실행되는 이유는 무엇입니까?
- 16. FileNotFoundException을 throw하지만 파일이 존재합니다.
- 17. C# - 내 Dictionary 클래스에서 ToArray() 메서드를 볼 수없는 이유는 무엇입니까?
- 18. 빈 Hashtable 객체의 크기는 무엇입니까?
- 19. JTable에 HashTable?
- 20. Z-Index가 IE8에서 작동하지 않습니다.
- 21. getToolTipText가 호출되지 않는 이유는 무엇입니까?
- 22. MapViewOfFile이 실패하지 않는 이유는 무엇입니까?
- 23. 람다에서 인쇄가되지 않는 이유는 무엇입니까?
- 24. ThreadPool.GetAvailableThreads가 작동하지 않는 이유는 무엇입니까?
- 25. 알림이 제거되지 않는 이유는 무엇입니까
- 26. ! isset이 작동하지 않는 이유는 무엇입니까?
- 27. 문자열이 일치하지 않는 이유는 무엇입니까?
- 28. didLoad가 실행되지 않는 이유는 무엇입니까?
- 29. ImageView가 출시되지 않는 이유는 무엇입니까?
- 30. SQLCommandBuider가 삭제되지 않는 이유는 무엇입니까?
같은 것을 알고 싶습니다. X-) –