if (searchCriteria.ContainsKey(key) &&
!string.IsNullOrEmpty(searchCriteria[key]))
searchTerm = searchCriteria[key];
Ever have a dictionary or similar data structure and your code has many repeated checks to pull the value when in reality you’d be happy with a default value like null
or string.Empty
? Well, consider the following extension to Dictionary
:
public static class DictionaryExtensions
{
public static TValue GetSafeValue<TKey, TValue>(this Dictionary<TKey,
TValue> dictionary, TKey key)
{
TValue result = default(TValue);
dictionary.TryGetValue(index, out result);
return result;
}
}
Let’s say you do...
Dictionary bob = new Dictionary();
string safe = bob.GetSafeValue(100);
System.Diagnostics.Trace.WriteLine(safe);
...where safe
defaults to “” as it hasn’t been added. Stop! I know what you’re going to say and I thought of that too. You can control the default value as well:
public static class DictionaryExtensions
{
public static TValue GetSafeValue<TKey, TValue>(this Dictionary<TKey,
TValue> dictionary, TKey key)
{
return dictionary.GetSafeValue(key, default(TValue));
}
public static TValue GetSafeValue<TKey, TValue>(this Dictionary<TKey,
TValue> dictionary, TKey key, TValue defaultValue)
{
TValue result;
if (key == null || !dictionary.TryGetValue(key, out result))
result = defaultValue;
return result;
}
}
Let’s say you do...
Dictionary bob = new Dictionary();
string safe = bob.GetSafeValue(100, null);
System.Diagnostics.Trace.WriteLine(safe);
...where safe
is null
.
There’s obviously something wrong with me because I still think this stuff is cool.
I’m developing a nice little set of extensions at this point. Often, it seems like overkill to encapsulate handy functions like these in a class. I had started by deriving a class from Dictionary<TKey, TValue>
but changed over to the above.