Dictionary Extensions: Define useful extensions to play safe January 18, 2012
Posted by codinglifestyle in C#, CodeProject.Tags: dictionary, extension, extension methods, key, safe, templates, value
trackback
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 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 { /// <summary> /// Gets the safe value associated with the specified key. /// </summary> /// <typeparam name="TKey">The type of the key.</typeparam> /// <typeparam name="TValue">The type of the value.</typeparam> /// <param name="dictionary">The dictionary.</param> /// <param name="key">The key of the value to get.</param> public static TValue GetSafeValue<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key) { return dictionary.GetSafeValue(key, default(TValue)); } /// <summary> /// Gets the safe value associated with the specified key. /// </summary> /// <typeparam name="TKey">The type of the key.</typeparam> /// <typeparam name="TValue">The type of the value.</typeparam> /// <param name="dictionary">The dictionary.</param> /// <param name="key">The key of the value to get.</param> /// <param name="defaultValue">The default value.</param> 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 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.
Comments»
No comments yet — be the first.