https://gall.dcinside.com/m/csharp/675
Generic이 아닌 Dictionary의 유용성.net5기준제네릭으로 타입이 지정된 Dictionary는 구조체에 대응해야해서 그런지 없는 key로 get하면 에러가 발생하지만object로 관리하는 HashTable은 그냥 null을 준다.그리고 제네릭한 딕셔너리gall.dcinside.com지난번에 무지성 딕셔너리를 활용해 KeyNotFoundException 을 회피하고 null로 때우는 방법을 소개한적이 있다.
상식적인 시스템이라면, 가진건 없는데 문제삼지 않고 뭔가 건내줘야하는 부조리한 상황은 상정하지 않는것이 올바른 개발이나,
유저인터페이스를 구현하는 처지의 개발자라면, 인간의 온갖 변덕에 당연하다는듯 노출된채로 성장하여
차라리 타입이나 키검증같은 융통성없는 방식을 때려치고 싶어지는 욕구가 자연스레 생기곤 한다. 그래서 그놈의 자스가 인기가 많은가보다.
class InfpDictionary<TKey, TValue> : Dictionary<TKey, TValue> where TKey : notnull
{
[System.Diagnostics.CodeAnalysis.DisallowNull]
new public TValue? this[TKey key]
{
get => ContainsKey(key) ? base[key] : default;
set => base[key] = value;
}
}
하지만 그 온갖 선언과 검증을 때려친다는건 내 코드의 아무것도 신뢰할수 없게만든다는것,
아무데나 냅다 붙여도 딱 에러만 안뱉는 정도의 제네릭딕셔너리가 필요하여 위와같이 상속시켰다.
없는키의 값을 요청해도 암말없이 null혹은 기본값을 주지만 null을 받는것엔 사소한 저항(Warring)을 하는 인프피성향의 딕셔너리이다.
?? ??= 연산자와도 잘어울릴수가 있다.
IDictionary가 null회피를 위해 사용된다는건 코드맥락에서 읽기가 어렵고,
NullableDictionary? DefaultOrDictionary? 아무리 생각해도 이건 인프피사전이다.
+2024-04-23 C#14 기준 개편. Nullabilisation
이 댓글은 게시물 작성자가 삭제하였습니다.
헌붕아..