[C#] 키가 없으면 C # Dictionary <int, int> 조회는 어떻게 되나요?

null 검사를 시도했지만 컴파일러는이 조건이 발생하지 않을 것이라고 경고합니다. 무엇을 찾아야합니까?



답변

가있는 경우 값을 얻으려면 다음을 사용하십시오 Dictionary<TKey, TValue>.TryGetValue.

int value;
if (dictionary.TryGetValue(key, out value))
{
    // Key was in dictionary; "value" contains corresponding value
} 
else 
{
    // Key wasn't in dictionary; "value" is now 0
}

(사용 ContainsKey하고 인덱서를 사용하면 키가 두 번 표시되며 이는 매우 무의미합니다.)

참조 유형 사용 하는 경우에도 null 검사는 작동하지 않습니다 Dictionary<,>. null을 반환하는 대신 누락 된 키를 요청하면에 대한 인덱서 에서 예외가 발생합니다. (이 사이에 큰 차이가 Dictionary<,>Hashtable.)


답변

사전에 KeyNotFound키가 포함되어 있지 않은 경우 사전에서 예외 가 발생합니다.

제안 된대로 ContainsKey적절한 예방 조치입니다. TryGetValue효과적입니다.

이를 통해 사전은 null 값을보다 효과적으로 저장할 수 있습니다. 이런 식으로 작동하지 않으면 [] 연산자의 null 결과를 확인하면 null 값 또는 좋지 않은 입력 키가 없음을 나타냅니다.


답변

새 값을 추가하기 전에 확인하는 경우 다음 ContainsKey방법을 사용하십시오 .

if (!openWith.ContainsKey("ht"))
{
    openWith.Add("ht", "hypertrm.exe");
}

값이 있는지 확인하는 경우 TryGetValueJon Skeet의 답변에 설명 된 방법을 사용하십시오 .


답변

값을 꺼내기 전에 Dictionary.ContainsKey (int key)를 확인해야합니다.

Dictionary<int, int> myDictionary = new Dictionary<int, int>();
myDictionary.Add(2,4);
myDictionary.Add(3,5);

int keyToFind = 7;
if(myDictionary.ContainsKey(keyToFind))
{
    myValueLookup = myDictionay[keyToFind];
    // do work...
}
else
{
    // the key doesn't exist.
}


답변

도우미 클래스가 편리합니다.

public static class DictionaryHelper
{
    public static TVal Get<TKey, TVal>(this Dictionary<TKey, TVal> dictionary, TKey key, TVal defaultVal = default(TVal))
    {
        TVal val;
        if( dictionary.TryGetValue(key, out val) )
        {
            return val;
        }
        return defaultVal;
    }
}


답변

ContainsKey 는 당신이 찾고있는 것입니다.


답변

아마도 다음을 사용해야합니다.

if(myDictionary.ContainsKey(someInt))
{
  // do something
}

null을 확인할 수없는 이유는 여기서 키가 값 유형이기 때문입니다.