我有以下代码:
TConverted ret;
ret = forward.Get<TConverted>(GetForwardKey(id, convType));
if (ret != default(TConverted))... // wrong here !
泛型Get函数从缓存中返回一个项目。它可以是值类型或类。我想检查返回的值是否为null或默认值,但我猜它应该工作的代码不是。有可能吗?
答案 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的回答(我引用过)提出。