如果将字段定义为自动属性,如何获取字段的值?
我不知道为什么,但我第一次遇到如此简单的任务,这种简单的任务被称为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)
}
}
}