ContainsKey & TryGetValue

TryGetValue vs. ContainsKey?

// key가 있는지 체크
public bool ContainsKey(TKey key)
{
  return (this.FindEntry(key) >= 0);
}

// key가 있는지 체크
// key를 발견 시, value에 out 키워드로 값을 담음
public bool TryGetValue(TKey key, out TValue value)
{
  int index = this.FindEntry(key);
  if (index >= 0)
  {
    value = this.entries[index].value;
    return true;
  }
  value = default(TValue);
  return false;
}
  • 지정한 키가 해당 Dictionary에 있는지 여부를 확인하는 메서드
  • Boolean 반환
    • 있는 경우 -> true
    • 없는 경우 -> false
    • 값의 존재 여부를 체크한 뒤, 그 값을 받아오는 방식은 TryGetValue를 사용하는 것을 권장
// Dictionary[key]
public TValue this[TKey key] 
{
  get {
      int i = FindEntry(key);
      if (i >= 0) return entries[i].value;
      ThrowHelper.ThrowKeyNotFoundException();
      return default(TValue);
  }
  set {
      Insert(key, value, false);
  }
}
// 따라서 아래와 같은 경우는 overhead가 발생
if (dic.ContainsKey(key))
{
   getValue = dic[key];
}

출처