自動プロパティとして定義されている場合、フィールドの値を取得するにはどうすればよいですか?
理由はわかりませんが、このような説明のつかないメソッドが呼び出されたときに初めてこのような単純なタスクに遭遇したのGetValue
ですが、それは私が望むようには機能せず、通常は元の単純な仕事を行う代わりにあらゆる種類の例外をスローします..
たとえば、いくつかのコード:
Class A
{
public int Age { get; set;}
}
ここで、リフレクションの後、 A インスタンスのフィールドを FiledInfo[] の構造で保持していると仮定します。
今、私は上記の配列で関連する fieldInfo を見つけました。彼の名前は
{Int32 k__BackingField} で、とにかく奇妙に聞こえます..
int 値を取得するために GetValue() を使用するにはどうすればよいですか? おっしゃるとおり、色々試してみましたが..
編集:( これは部分的に簡略化されたコードです - 怒らないでください)
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)
}
}
}