ExtensionMethod.NET Home of 880 C#, Visual Basic, F# and Javascript extension methods

Dictionary<K,V>.GetValueOrDefault()

If you attempt to get a value from a dictionary using a key that doesn't exist, it throws a KeyNotFoundException. But this extension method to return a default value when the key doesn't exist. Also supports an overload with a Lazy initialization of the fallback value.

Source

static class Extensions {

    public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue defaultValue) where TKey : notnull {
        ArgumentNullException.ThrowIfNull(dictionary);

        return dictionary.TryGetValue(key, out var value) ? value : defaultValue;
    }

    public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, Lazy<TValue> defaultValue) where TKey : notnull {
        ArgumentNullException.ThrowIfNull(dictionary);

        return dictionary.TryGetValue(key, out var value) ? value : defaultValue.Value;
    }
}

Example

Dictionary<int, string> dictionary = new()
{
    { 1, "foo" }
};

Console.WriteLine(dictionary.GetValueOrDefault(1, "not found")); // foo
Console.WriteLine(dictionary.GetValueOrDefault(2, "not found")); // not found
Console.WriteLine(dictionary.GetValueOrDefault(3, new Lazy<string>("not found"))); // not found

Author: Fons Sonnemans

Submitted on: 14 jul. 2023

Language: csharp

Type: dictionary-tkey-tvalue

Views: 1594