如何解决如何在通用 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));
现在我想比较这个 var 以了解该值是否在字典中找到,但不能使用运算符 ==
,因为编译器不知道它是值还是引用类型。所以我用了 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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。