违约测试一个通用的返回值

违约<T>测试一个通用的返回值

问题描述:

伊夫下面的代码:违约<T>测试一个通用的返回值

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

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

+2

你会得到什么错误? – SLaks 2012-08-01 13:03:03

this essentially-identical question ...

为了避免拳击,比较仿制药的平等与 EqualityComparer<T>.Default的最佳途径。这方面IEquatable<T>(没有 拳击)以及object.Equals,并处理所有的“提升”的细微差别的所有Nullable<T> 。因此:

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

这将匹配:

  • 为类
  • 空(空)为null Nullable<T>
  • 零/假/等其他结构

如果这对你有帮助,请提供Mark Gravell的回答(我已经找到了答案)讽刺)关于我所链接的问题。

+0

谢谢,抱歉错过了答案,我提出了你的和Mark的答案。 – 2012-08-01 13:26:23