簡體   English   中英

如何比較FieldInfo的實例值?

[英]How do I compare FieldInfo's values of instances?

public partial class Form1 : Form
{        
    public Form1()
    {
        InitializeComponent();

        myClass instance1 = new myClass();
        myClass instance2 = new myClass();
        FieldInfo[] fields = typeof(myClass).GetFields();
        foreach (FieldInfo field in fields) if (field.GetValue(instance2) == field.GetValue(instance1)) Text = "Yes";           
    }
}

class myClass
{
    public bool b = false;
    public int i = 2;
}

從不返回“是”。

編輯:事先知道什么類型。 所以我不能有(bool)field.GetValue(instance1)

您正在使用== ,它將比較類型為值類型的任何字段的裝箱值。 每次將值裝箱時,它將創建一個新對象,因此==永遠不會那樣工作。 使用object.Equals代替:

 foreach (FieldInfo field in fields)
 {
     if (object.Equals(field.GetValue(instance2), field.GetValue(instance1))
     {
         Text = "Yes";
     }
 }

(在這里使用static方法意味着即使值是null它也將起作用。)

您正在比較FieldInfo.GetValue返回的兩個對象的address ,由於內存中的這些地址不同,所以==永遠不會為真。

嘗試用以下方法替換if

if (field.GetValue(instance2).Equals(field.GetValue(instance1)))

因為field.GetValue(instance1)返回該值的“盒裝”(對象)版本,所以調用==只能比較兩個不同的引用。

嘗試改為調用:

field.GetValue(instance2).Equals(field.GetValue(instance1))

暫無
暫無

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

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