我如何处理空值在一个通用的var比较?



我有一个方法按键从字典中检索值,如果没有找到则返回默认值

public static TValue GetValueOrDefault<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue defaultValue)
{
if (dict.TryGetValue(key, out TValue existingValue))
{
return existingValue;
}
else
{
return defaultValue;
}
}

在泛型方法中使用时,默认值设置为default(T),因为它可以是值或引用类型

T myGenericVar = myDict.GetValueOrDefault(key, default(T));

现在我想比较这个变量,以便了解该值是否在字典中找到,但是由于编译器不知道它是值类型还是引用类型,因此不能使用操作符==。所以我用了Equals

bool found = myGenericVar.Equals(default(T))

如果T是一个引用类型,default(T)实际上是null,并且在null时调用Equals会产生NullReferenceException

如何避免异常?

正如评论中所暗示的,如果您想知道是否返回默认值,请创建另一个方法TryGetValueOrDefault:

public static bool TryGetValueOrDefault<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue defaultValue, out TValue value)
{
if (dict.TryGetValue(key, out TValue existingValue))
{
value = existingValue
return true;
}
else
{
value = defaultValue;
return false
}
}

最新更新