또 다른 두 가지 C# 관용구 - 3부

C# 관용구 시리즈의 이 부분은 사전에 관한 것입니다.

항목을 추가하기 전에 사전에 항목이 포함되어 있는지 확인하는 대신 TryAdd를 사용하십시오.


TryAdd 항목이 사전에 추가되었는지 여부를 반환합니다. Add 와 달리 주어진 키가 이미 사전에 있으면 TryAdd 예외가 발생하지 않습니다. 그것은 단순히 아무것도하지 않을 것입니다. 항목이 이미 있습니다.

전에,

var myDictionary = new Dictionary<string, string>();
myDictionary.Add("foo", "bar");

// System.ArgumentException: An item with the same key has already been added. Key: foo
myDictionary.Add("foo", "baz");


후에,

var myDictionary = new Dictionary<string, string>();

if (!myDictionary.ContainsKey("foo"))
  myDictionary.Add("foo", "bar");


더 나은,

var myDictionary = new Dictionary<string, string>();
myDictionary.TryAdd("foo", "bar"); // true

myDictionary.Add("foo", "baz");
myDictionary.TryAdd("foo", "bar"); // false


TryGetValue 또는 GetValueOrDefault로 KeyNotFoundException 방지



적어도 지금은 KeyNotFoundException 메시지에 찾을 수 없는 키의 이름이 포함되어 있습니다. 찾을 수 없는 열쇠를 쫓던 시대는 끝났습니다.

한편으로 TryGetValue는 찾은 값과 함께 출력 매개변수를 사용합니다. 사전에 항목이 포함되지 않은 경우 기본값을 출력합니다. TryGetValue 튜플이 없던 시절로 거슬러 올라갑니다.

반면에 GetValueOrDefault는 기본값을 반환하거나 키를 찾을 수 없는 경우 제공한 값을 반환합니다.

전에,

var dict = new Dictionary<string, string>();

// System.Collections.Generic.KeyNotFoundException: The given key 'foo' was not present in the dictionary.
dict["foo"];


후에,

var dict = new Dictionary<string, string>();

dict.TryGetValue("foo", out var foo); // false, foo -> null

dict.Add("foo", "bar");
dict.TryGetValue("foo", out foo); // true, foo -> "bar"


더 나은,

var dict = new Dictionary<string, string>();

dict.GetValueOrDefault("foo"); // null
dict.GetValueOrDefault("foo", "withoutFoo"); // "withoutFoo"

dict.Add("foo", "bar");
dict.GetValueOrDefault("foo", "withoutFoo"); // "bar"


즐거운 코딩!

좋은 웹페이지 즐겨찾기