【发布时间】:2012-09-09 14:14:20
【问题描述】:
在一个通用的GetHashCode(T foo) 方法中,我检查foo 是否是null。
然而,我偶然发现了一个奇怪的 Resharper 警告。
在下面的代码中,foo 可以永远不是null吗?
private class FooComparer<T> : IEqualityComparer<T> where T: Foo
{
public int GetHashCode(T foo)
{
// resharper warning: "Expression is always false"
if (Object.ReferenceEquals(null,foo)) return 0;
// ... calculate hash
}
}
但据我所知,以下是完全合法的:
Foo foo = null;
var fooComparer = new FooComparer<Foo>();
int hash = fooComparer.GetHashCode(foo);
【问题讨论】:
-
是的,您的代码完全合法。
-
Foo是值还是引用类型? -
Foo是一个类,而不是一个结构
标签: c# generics null resharper language-specifications