我试图获得当前类的字段。我让这个类实现了ICloneable
接口。
在clone()
中,下面一行似乎没有找到任何字段。为什么不过?
foreach (FieldInfo fi in this.GetType().GetFields())
{
}
许多谢谢,只查找公共字段。看BindingFlags
建议一个更好的方法,只需调用MemberwiseClone
,它将复制当前类/实例中的所有字段值。
因为默认情况下只返回公共字段。使用BindingFlags.NonPublic
的另一个重载
使用BindingFlags
作为:
var flags = BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Public;
foreach (FieldInfo fi in this.GetType().GetFields(flags))
{
//...
}
GetFields返回当前类型的所有公共字段。http://msdn.microsoft.com/en-us/library/ch9714z3.aspx您可能需要http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx
GetFields为空的唯一原因是"没有为当前类型定义公共字段"(来自MSDN)。
更一般地说,你知道Object类中已经存在一个受保护的方法,它已经做了你想做的事情(浅拷贝)吗?它叫做MemberwiseClone
你可以这样使用:
public object Clone()
{
return MemberWiseClone();
}