根据默认值<t> </t>测试通用返回值

时间:2012-08-01 13:00:53

标签: c#

我有以下代码:

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

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

1 个答案:

答案 0 :(得分:3)

来自this essentially-identical question ...

  

为避免拳击,比较泛型的最佳方法是使用   EqualityComparer<T>.Default。这尊重IEquatable<T>(没有   拳击)以及object.Equals,并处理所有Nullable<T>   “解除”细微差别。因此:

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

这将匹配:

     
      
  • null for classes
  •   
  • Nullable<T>
  • 的空(空)   
  • 其他结构的零/假/等
  •   

如果这对您有帮助,请就我所链接的问题向Mark Gravell的回答(我引用过)提出。