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