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