EqualityComparer.Default vs. T.Equals

25 浏览
0 Comments

EqualityComparer.Default vs. T.Equals

假设我有一个需要比较两个类型为的对象的通用>。通常我会做这样的事情...

void DoSomething(T o1, T o2)

{

if(o1.Equals(o2))

{

...

}

}

现在假设我的>有一个支持传递自定义>的构造函数,类似于>。在这种情况下,我需要这样做...

private IEqualityComparer _comparer;

public MyClass() {}

public MyClass(IEqualityComparer comparer)

{

_comparer = comparer;

}

void DoSomething(T o1, T o2)

{

if((_comparer != null && _comparer.Equals(o1, o2)) || (o1.Equals(o2)))

{

...

}

}

为了去除这个冗长的if语句,如果我可以让_comparer在使用常规构造函数时默认为“默认比较器”,那就好了。我搜索了类似于的东西,但没有找到类似的东西。

我找到了.Default>,我可以使用它吗?然后这段代码...

public MyClass()

{

_comparer = EqualityComparer.Default;

}

void DoSomething(T o1, T o2)

{

if(_comparer.Equals(o1, o2))

{

...

}

}

...对于所有可能的情况是否提供了与使用o1.Equals(o2)相同的结果?

(顺便说一句,这是否意味着我还需要使用任何特殊的泛型约束来限制?)

0