クラスの特定のメンバーで使用するカスタム属性を作成しました。
public class Dummy
{
[MyAttribute]
public string Foo { get; set; }
[MyAttribute]
public int Bar { get; set; }
}
タイプからカスタム属性を取得して、特定の属性を見つけることができます。方法がわからないのは、割り当てられたプロパティの値を取得することです。Dummyのインスタンスを取得し、それを(オブジェクトとして)メソッドに渡す場合、.GetProperties()から取得したPropertyInfoオブジェクトを取得して、.Fooと.Barに割り当てられた値を取得するにはどうすればよいですか?
編集:
私の問題は、GetValueを適切に呼び出す方法がわからないことです。
void TestMethod (object o)
{
Type t = o.GetType();
var props = t.GetProperties();
foreach (var prop in props)
{
var propattr = prop.GetCustomAttributes(false);
object attr = (from row in propattr where row.GetType() == typeof(MyAttribute) select row).First();
if (attr == null)
continue;
MyAttribute myattr = (MyAttribute)attr;
var value = prop.GetValue(prop, null);
}
}
ただし、これを行うと、prop.GetValue呼び出しでTargetExceptionが発生します-オブジェクトがターゲットタイプと一致しません。この値を取得するためにこの呼び出しを構成するにはどうすればよいですか?