如何比较字段信息的实例值
本文关键字:信息 实例 字段 何比较 比较 | 更新日期: 2023-09-27 18:24:42
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";
}
}
(此处使用静态方法意味着即使null
值也可以工作。
您正在比较 FieldInfo.GetValue 返回的两个对象的address
,并且由于内存中的这些地址不同,因此==
永远不会为真。
尝试将if
替换为以下内容:
if (field.GetValue(instance2).Equals(field.GetValue(instance1)))
因为字段。GetValue(instance1( 返回值的"盒装"(对象(版本,因此调用==
您只是在比较两个不同的引用。
尝试改为调用:
field.GetValue(instance2).Equals(field.GetValue(instance1))