簡體   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