为什么字典类的默认值与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为空。为什么?
答案 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())