繁体   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