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