C#, C♯, C#相談室 Part46
■ このスレッドは過去ログ倉庫に格納されています
0070デフォルトの名無しさん
2008/05/01(木) 21:45:22こういうユーティリティクラスを作っておくとか。
ttp://d.hatena.ne.jp/NyaRuRu/20071228/p2
public static class Reflector
{
static PropertyInfo GetPropertyInfo(this Expression expression)
{
var findprop = default(Func<Expression, PropertyInfo>);
findprop = expr =>
{
switch (expr.NodeType)
{
case ExpressionType.Lambda:
return findprop((expr as LambdaExpression).Body);
case ExpressionType.Quote:
return findprop((expr as UnaryExpression).Operand);
case ExpressionType.MemberAccess:
return (expr as MemberExpression).Member as PropertyInfo;
default:
return null;
}
};
return findprop(expression);
}
public static PropertyInfo Property<TArg, TResult>(Expression<Func<TArg, TResult>> expr)
{
return expr.GetPropertyInfo();
}
}
使い方。
var defaultValue = Reflector.Property((MyComponent2 comp) => comp.MyProperty).GetCustomAttributes(typeof(DefaultValueAttribute), false)[0];
これでリファクタリングしても一緒に名前が変わるはず。
■ このスレッドは過去ログ倉庫に格納されています