簡體   English   中英

C# int 相等運算符意外錯誤

[英]C# int equality operator unexpectedly false

這是一個更廣泛的問題,以我的具體示例為例。 達到這一點的代碼相當復雜,所以我希望這就足夠了。

C# 中的兩個相同的整數在什么情況下不相等?

1005 == 1005 //false

在此處輸入圖像描述

在此處輸入圖像描述

specConversion開始時是一個傳遞的字符串spec ,其中確定了y的類型(類的一個屬性),然后spec被轉換為該類型作為specConversion 這似乎按預期工作,因為此時兩個變量具有相同的類型。 我不確定這是否與最初的問題相關:為什么這兩個 int 值不相等?

當調試器顯示:

object {int}

這意味着它是一個裝箱的 int 。 盒裝值類型是object (具體來說,是System.ValueType ),它是一種引用類型。 每個裝箱都會產生一個新的 object 實例,這意味着它們將不具有引用相等性,即使它們裝箱了相同的值。 ==運算符,對於引用類型,測試引用相等性,因此在這種情況下它將返回 false。

如果您想要值相等而不是引用相等,請使用Equals

public class Program
{
    public static void Main()
    {
        object a = 1;
        object b = 1;

        Console.WriteLine(a == b);
        Console.WriteLine(a.Equals(b));
    }
}

Output:

False
True

https://do.netfiddle.net/eSuFVL

另一種解決方案是將您的int值存儲在實際的int變量而不是對象中,例如使用generics

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM