[英]What's the most performant way to compare two values for equality?
假设我在 C# 中有一个通用方法,它接受两个 T 类型的值:
public void M<T>(T a, T b)
{
...
}
在 M() 的内部,我希望比较两个输入值是否相等。 由于我对它们的运行时类型一无所知,除了它们是相同的类型,我可以使用 object.Equals() static 方法来做到这一点,并让它选择最好的方法:
public void M<T>(T a, T b)
{
if (object.Equals(a, b))
{
...
}
else
{
...
}
}
我在这里看到的问题是当 T 不是引用类型时对两个值进行不必要的装箱。 我想避免这种惩罚,因为 M() 被非常频繁地调用。
我的问题是:有没有更好的方法来 go 关于这个? 我显然对一个不涉及太多预先分析 T 的解决方案感兴趣,这将抵消拳击规避带来的收益。
TIA。
if(EqualityComparer<T>.Default.Equals(a,b))
{...}
这在可用时使用IEquatable<T>
来避免装箱,并处理值类型、引用类型和针对Nullable<T>
的“提升”用法,以避免在几乎所有情况下装箱。
当IEquatable<T>
不可用时,它必须object.Equals
,因此可能会发生值类型的装箱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.