IDictionary.GetValue

        /// <summary>
        /// An alternative way to get a value from a dictionary.
        /// The return value is a Lazy object containing the value if the value exists in the dictionary.
        /// If it doesn't exist, the Lazy object isn't initialized.
        /// Therefore, you can use the .IsValueCreated property of Lazy to determine if the object has a value.
        /// In addition, if the dictionary did not have the key, .Value property of Lazy will be return the default value of the type.
        /// such as null for string and 0 for int.
        /// In some cases, simply using the .Value directly of or testing for null may be preferable to testing IsValueCreated
        /// </summary>
        public static Lazy<TValue> GetValue<TValue, TKey>(this IDictionary<TKey, TValue> dictionary, TKey key)
        {
            TValue retVal;
            if (dictionary.TryGetValue(key, out retVal))
            {
                var retValRef = retVal;
                var lazy = new Lazy<TValue>(() => retValRef);
                retVal = lazy.Value;
                return lazy;
            }

            return new Lazy<TValue>(() => default(TValue));
        }
Example:
            var d = new Dictionary<string, string> {{"KeyApple", "ValueApple"}, {"KeyOrange", "ValueOrange"}, {"KeyPear", "ValuePear"}};

            Assert.AreEqual("ValueApple", d.GetValue("KeyApple").Value);
            Assert.IsNull(d.GetValue("XXXXXXX").Value);

            var lazy1 = d.GetValue("KeyApple");
            Assert.IsTrue(lazy1.IsValueCreated);
            Assert.AreEqual("ValueApple", lazy1.Value);

            var lazy2 = d.GetValue("XXXXXXX");
            Assert.IsFalse(lazy2.IsValueCreated);

Description

Better way to read a C# Dictionary

Details

Double click on the code to select all.

 

;