微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在通用 var 比较中处理空值?

如何解决如何在通用 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 举报,一经查实,本站将立刻删除。