【问题标题】:Testing a generic return value against default<T>根据 default<T> 测试通用返回值
【发布时间】:2012-08-01 21:08:08
【问题描述】:

我有以下代码:

    TConverted ret;
    ret = forward.Get<TConverted>(GetForwardKey(id, convType));
    if (ret != default(TConverted))... // wrong here !

通用 Get 函数从缓存中返回一个项目。它可以是值类型或类。我想检查返回的值是 null 还是默认值,但是我猜它应该可以工作的代码却没有。有可能吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

    来自this essentially-identical question...

    为避免装箱,比较泛型是否相等的最佳方法是 EqualityComparer&lt;T&gt;.Default。这尊重IEquatable&lt;T&gt;(没有 拳击)以及object.Equals,并处理所有Nullable&lt;T&gt; “提升”的细微差别。因此:

    if(EqualityComparer<T>.Default.Equals(obj,default(T)) {
        return obj;
    }
    

    这将匹配:

    • 类为空
    • Nullable&lt;T&gt; 为空(空)
    • 其他结构的零/假/等

    如果这对您有帮助,请就我链接到的问题投票支持 Mark Gravell 的回答(我已引用)。

    【讨论】:

    • 谢谢,很抱歉错过了答案,我赞成你和马克的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多