gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:08:57 26 4
gpt4 key购买 nike

假设我在 C# 中有一个通用方法,它接受两个 T 类型的值:

public void M<T>(T a, T b)
{
...
}

在 M() 的内部我希望比较两个输入值是否相等。由于除了它们是同一类型外,我对它们的运行时类型一无所知,因此我可以使用 object.Equals() 静态方法来做到这一点,并让它选择最佳方式:

public void M<T>(T a, T b)
{
if (object.Equals(a, b))
{
...
}
else
{
...
}
}

我在这里看到的问题是当 T 不是引用类型时对两个值进行不必要的装箱。我想避免这种惩罚,因为 M() 的调用非常频繁。

我的问题是:有没有更好的方法来解决这个问题?我显然对一种不会预先对 T 进行过多分析的解决方案感兴趣,这将抵消拳击规避带来的 yield 。

TIA。

最佳答案

if(EqualityComparer<T>.Default.Equals(a,b))
{...}

这使用 IEquatable<T>可用时避免装箱,并处理值类型、引用类型和针对 Nullable<T> 的“提升”用法避免在几乎所有情况下装箱。

IEquatable<T> 可用,它必须遵从object.Equals , 因此可能会发生值类型的装箱。

关于c# - 比较两个值是否相等的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6570545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com