繁体   English   中英

比较两个相等值的最有效方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM