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).
您正在使用==,它将比较类型为值类型的任何字段的盒装值.每次将值装箱时,它都会创建一个新对象,因此==永远不会像那样工作.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.)
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |