字典的默认值和LINQ中的FirstOrDefault()不匹配

时间:2018-11-20 22:36:11

标签: c# linq default-value

为什么字典类的默认值与FirstOrDefault使用LINQ返回的默认值不同?

Dictionary<Mode, string> myDict = new Dictionary<Mode, string>() { { Mode.First, "ValueFirst" }, { Mode.Second, "ValueSecond" }, { Mode.Third, "ValueThird" }, { Mode.Forth, "ValueForth" } };
var r1 = myDict.Where(d => d.Value == "Do not exist").FirstOrDefault();
var r2 = default(Dictionary<Mode, string>);

这里模式是一个枚举。结果,r1是具有默认值的键值对,而r2为空。为什么?

1 个答案:

答案 0 :(得分:-1)

使用default(KeyValuePair<,>)检查默认值:

var kvp = dict.FirstOrDefault(...);
if (default(KeyValuePair<Mode, string>).Equals(kvp))

或者,您可以在此处使用扩展方法:

public static class KeyValuePairExtensions
{
    public static bool IsDefault<TKey, TValue>(this KeyValuePair<TKey, TValue> kvp) => default(KeyValuePair<Mode, string>).Equals(kvp);
}

// usage
var kvp = dict.FirstOrDefault(...);
if (kvp.IsDefault())