我正在尝试获取当前类的字段。我让类实现了ICloneable
接口。
在clone()
内,以下行似乎找不到任何字段。为什么呢?
foreach (FieldInfo fi in this.GetType().GetFields())
{
}
非常感谢,
答案 0 :(得分:2)
那只能找到公共领域。看看BindingFlags
。
要建议更好的方法,只需调用MemberwiseClone
,它将复制当前类/实例中的所有字段值。
答案 1 :(得分:1)
因为默认情况下只返回公共字段。使用BindingFlags.NonPublic
的其他重载。
答案 2 :(得分:0)
GetFields返回当前Type的所有公共字段。 http://msdn.microsoft.com/en-us/library/ch9714z3.aspx您可能需要http://msdn.microsoft.com/en-us/library/6ztex2dc.aspx
答案 3 :(得分:0)
使用BindingFlags
:
var flags = BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Public;
foreach (FieldInfo fi in this.GetType().GetFields(flags))
{
//...
}
答案 4 :(得分:0)
GetFields为空的唯一原因是“没有为当前类型定义公共字段”(来自MSDN)。
更一般地说,您是否知道Object类中已经存在已经执行了您正在尝试执行的操作的受保护方法(浅层副本)?它被称为MemberwiseClone
您可以像这样使用它:
public object Clone()
{
return MemberWiseClone();
}