patterncsharpModerate
Dictionary GetValueOrDefault
Viewed 0 times
dictionarygetvalueordefaultstackoverflow
Problem
I'm pretty sure there's no better way to do this but I thought a consensus on here might be nice. Let me know what you think.
public static TValue GetValueOrDefault(this Dictionary dictionary, TKey key, TValue defaultValue = default(TValue))
{
TValue value;
return dictionary.TryGetValue(key, out value) ? value : defaultValue;
}Solution
I'm pretty sure there's no better way to do this but I thought a consensus on here might be nice. Let me know what you think.
At first glance it seems to be ok but one could assume that he/she is always getting either the value or the default value. If one would get the default value for e.g if the dictionary is empty, why shouldn't he/she get the default value if the dictionary is
If this isn't the way the method should work, then you need some documentation which cleary states the purpose and any expected exceptions.
Now, what happens if the method is called either like so
or (assuming the method lives in the "DictionaryExtensions" class)
sure you get a
What about if the
IMO it would be better to check this cases inside the
At first glance it seems to be ok but one could assume that he/she is always getting either the value or the default value. If one would get the default value for e.g if the dictionary is empty, why shouldn't he/she get the default value if the dictionary is
null or the key is null ? If this isn't the way the method should work, then you need some documentation which cleary states the purpose and any expected exceptions.
Now, what happens if the method is called either like so
Dictionary dict = null;
dict.GetValueOrDefault("someKey");or (assuming the method lives in the "DictionaryExtensions" class)
Dictionary dict = null;
DictionaryExtensions.GetValueOrDefault(dict, "someKey");sure you get a
NullReferenceException but is this the type of exception one would expect ? If I call a method with an parameter being null I would expect to get either no exception or to get an ArgumentNullException. What about if the
key is null ? Sure you get an ArgumentNullException but it takes some time because it is thrown at the FindEntry() method of the Dictionary and this is also shown in the StackTrace. IMO it would be better to check this cases inside the
GetValueOrDefault() method and throw the exceptions there. public static TValue GetValueOrDefault(this Dictionary dictionary, TKey key, TValue defaultValue = default(TValue))
{
if (dictionary == null) { throw new ArgumentNullException(nameof(dictionary)); } // using C# 6
if (key == null) { throw new ArgumentNullException(nameof(key)); } // using C# 6
TValue value;
return dictionary.TryGetValue(key, out value) ? value : defaultValue;
}Code Snippets
Dictionary<string, int> dict = null;
dict.GetValueOrDefault("someKey");Dictionary<string, int> dict = null;
DictionaryExtensions.GetValueOrDefault(dict, "someKey");public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue defaultValue = default(TValue))
{
if (dictionary == null) { throw new ArgumentNullException(nameof(dictionary)); } // using C# 6
if (key == null) { throw new ArgumentNullException(nameof(key)); } // using C# 6
TValue value;
return dictionary.TryGetValue(key, out value) ? value : defaultValue;
}Context
StackExchange Code Review Q#110621, answer score: 15
Revisions (0)
No revisions yet.