如何比较FieldInfo的实例值?

isp*_*iro 1 .net c# reflection fieldinfo

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;
}
Run Code Online (Sandbox Code Playgroud)

永远不会返回"是".

编辑:事先知道类型将是什么.所以我不能:(bool)field.GetValue(instance1).

Jon*_*eet 6

您正在使用==,它将比较类型为值类型的任何字段的盒装值.每次将值装箱时,它都会创建一个新对象,因此==永远不会像那样工作.object.Equals改为使用:

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

(在这里使用静态方法意味着它即使值是可行的null.)