我有以下代码:
TConverted ret;
ret = forward.Get<TConverted>(GetForwardKey(id, convType));
if (ret != default(TConverted))... // wrong here !
通用 Get 函数从缓存中返回一个项目。它可以是值类型或类。我想检查返回的值是 null 还是默认值,但是我猜它应该可以工作的代码却没有。有可能吗?
我有以下代码:
TConverted ret;
ret = forward.Get<TConverted>(GetForwardKey(id, convType));
if (ret != default(TConverted))... // wrong here !
通用 Get 函数从缓存中返回一个项目。它可以是值类型或类。我想检查返回的值是 null 还是默认值,但是我猜它应该可以工作的代码却没有。有可能吗?
从这个本质上相同的问题......
为避免装箱,比较泛型是否相等的最佳方法是使用
EqualityComparer<T>.Default
. 这尊重IEquatable<T>
(没有拳击)以及object.Equals
, 并处理所有Nullable<T>
“提升”的细微差别。因此:if(EqualityComparer<T>.Default.Equals(obj,default(T)) { return obj; }
这将匹配:
- 类为空
- 空(空)为
Nullable<T>
- 其他结构的零/假/等
如果这对您有帮助,请就我链接到的问题投票赞成 Mark Gravell 的回答(我已经引用过)。