假设我有一个MyClass<T>
需要比较两个 type 对象的泛型<T>
。通常我会做类似...
void DoSomething(T o1, T o2)
{
if(o1.Equals(o2))
{
...
}
}
现在假设我MyClass<T>
有一个支持传递自定义的构造函数IEqualityComparer<T>
,类似于Dictionary<T>
. 在那种情况下,我需要做...
private IEqualityComparer<T> _comparer;
public MyClass() {}
public MyClass(IEqualityComparer<T> comparer)
{
_comparer = comparer;
}
void DoSomething(T o1, T o2)
{
if((_comparer != null && _comparer.Equals(o1, o2)) || (o1.Equals(o2)))
{
...
}
}
要删除这个冗长的 if 语句,如果使用常规构造函数,我可以_comparer
默认为“默认比较器”,这将是一件好事。我搜索了类似的东西,typeof(T).GetDefaultComparer()
但找不到类似的东西。
我确实找到了EqualityComparer<T>.Default
,我可以使用它吗?然后这个片段......
public MyClass()
{
_comparer = EqualityComparer<T>.Default;
}
void DoSomething(T o1, T o2)
{
if(_comparer.Equals(o1, o2))
{
...
}
}
o1.Equals(o2)
...提供与所有可能情况相同的结果?
(作为旁注,这是否意味着我还需要使用任何特殊的通用约束<T>
?)