【发布时间】:2011-07-04 10:59:26
【问题描述】:
假设我在 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 的解决方案感兴趣,这将抵消拳击规避带来的收益。
TIA。
【问题讨论】: