【发布时间】:2012-12-14 20:41:51
【问题描述】:
如果字段定义为自动属性,如何获取字段值?
我不知道为什么,但我第一次遇到如此简单的任务,使用这种名为 GetValue 的无法解释的方法,它不能按我的意愿工作,并且通常会抛出各种异常,而不是做原来的简单工作..
一些代码例如:
Class A
{
public int Age { get; set;}
}
现在假设经过反射,我在 FiledInfo[] 的结构中保存了 A 实例的字段。
现在我在上面的数组中找到了相关的fieldInfo,他的名字是:
{Int32 k__BackingField} 听起来很奇怪,无论如何..
如何使用 GetValue() 来获取 int 值?正如我所说,我尝试了很多东西..
编辑:(这是部分简化的代码 - 不要生气)
private static string foo1<T>(T o)
{
var type = o.GetType();
var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
....
foo(fields);
}
}
private static void foo(FieldInfo[] fields)
{
foreach (FieldInfo field in fields)
{
if (field.FieldType.IsValueType)
{
var fieldNameLength = field.Name.IndexOf(">") - (field.Name.IndexOf("<")+1);
var fieldName = field.Name.Substring(field.Name.IndexOf("<")+1, fieldNameLength);
var fieldValue = field.ReflectedType.GetProperty(fieldName).GetValue(field.ReflectedType, null)
}
}
}
【问题讨论】:
-
如果它是一个自动属性,并且您在通过反射访问其值时抛出异常,那么您的反射代码可能有问题。在尝试绕过它之前先发布或提出问题。
-
如果你只是对字段的值感兴趣,为什么不检索属性值呢?它始终与自动属性的字段值相同。
-
好的,我正在尽快添加我的相关反射代码
-
请显示您尝试过的代码。目前尚不清楚为什么您无法获取字段的值(即,您在获取自动生成的名称时遇到问题,您不知道如何完全获取字段,其他...)
-
也试图通过该属性
标签: c# reflection automatic-properties