共用方式為


相等比較 (C# 程式設計手冊)

有時候需要比較兩個值是否相等。 在某些情況下,您會測試「實值相等」(Value Equality),也稱為「等價」(Equivalence),這表示兩個變數包含的值相等。 在其他情況下,您需判斷兩個變數是否參考記憶體中的同一個基礎物件。 這種相等稱為「參考相等」(Reference Equality) 或「一致」(Identity)。 本主題說明這兩種相等,並提供詳細資訊的其他主題連結。

參考相等

參考相等意指兩個物件參考全都參考到同一個基礎物件。 這只要用簡單的指派就可以做到,如下列範例所示。

using System;
class Test
{
    public int Num { get; set; }
    public string Str { get; set; }

    static void Main()
    {
        Test a = new Test() { Num = 1, Str = "Hi" };
        Test b = new Test() { Num = 1, Str = "Hi" };

        bool areEqual = System.Object.ReferenceEquals(a, b);
        // False:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);

        // Assign b to a.
        b = a;

        // Repeat calls with different results.
        areEqual = System.Object.ReferenceEquals(a, b);
        // True:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}

此程式碼會建立兩個物件,但在指派陳述式後,兩個參考都參考到同一物件。 因此這兩個物件具有參考相等。 使用 ObjectReferenceEquals() 方法即可判斷兩個參考是否參考到相同的物件。

參考相等的概念僅適用於參考型別。 實值型別物件不能有參考相等,因為當實值型別的執行個體指派給變數時,會產生一個實值副本。 因此,不可能有兩個 Unboxed 結構參考到記憶體中的相同位置。 此外,如果使用 ReferenceEquals() 比較兩個實值型別,結果永遠會是 false,即使物件中包含的值全都一致也一樣。 這是因為每個變數都 Boxed 成不同的物件執行個體。 如需詳細資訊,請參閱 HOW TO:參考相等 (識別) 的測試 (C# 程式設計手冊)

實值相等

實值相等是指兩個物件包含相同的值。 對於基本實值型別 (例如 intbool),測試實值相等相當直接簡單。 您可以用 == 運算子,如下列範例所示。

int a = GetOriginalValue();
int b = GetCurrentValue();

// Test for value equality. 
if( b == a) 
{
    // The two integers are equal.
}

至於大部分其他型別,測試實值相等比較複雜,因為您需要了解型別如何進行定義。 至於具有多重欄位或屬性的類別和結構,實值相等的定義通常是指所有欄位或屬性都有相同的值。 例如,有兩個 Point 物件,如果 pointA.X 等於 pointB.X 且 pointA.Y 等於 pointB.Y,即可定義為相等。

不過,沒有必要以型別中的所有欄位來定義等價。 可以以一個子集為準, 當您比較不屬於您的型別時,應確實了解該型別的等價是如何定義的。 如需如何在您自己的類別和結構中定義實值相等的詳細資訊,請參閱 HOW TO:定義型別的實值相等 (C# 程式設計手冊)

浮點值的實值相等

浮點值的相等比較 (doublefloat) 會有問題,因為二進位電腦上的浮點數運算並不精確。 如需詳細資訊,請參閱 System.Double 主題中的備註。

相關主題

標題

說明

HOW TO:參考相等 (識別) 的測試 (C# 程式設計手冊)

說明如何判斷兩個變數是否具有參考相等。

HOW TO:定義型別的實值相等 (C# 程式設計手冊)

說明如何提供型別的實值相等自訂定義。

C# 程式設計手冊

提供重要 C# 語言功能以及能夠透過 .NET Framework 用於 C# 之功能的詳細資訊連結。

型別 (C# 程式設計手冊)

提供 C# 型別系統的詳細資訊以及其他資訊的連結。

請參閱

概念

C# 程式設計手冊