请考虑以下代码:
public class Test
{
[System.AttributeUsage(System.AttributeTargets.Method)]
class MethodAttribute : System.Attribute
{
public MethodAttribute(System.Reflection.MethodInfo methodInfo)
{
}
}
public void Foo()
{
}
[Method(Test.Foo)] //< THIS IS THE IMPORTANT LINE
public void Boo()
{
}
}
我想在Boo的属性中存储Foo的MethodInfo实例,但问题是,我不能使用Foo
或Test.Foo
来获取MethodInfo
的实例。我可以不使用typeof(Test).GetMethod("Foo")
(不是我的决定)。
重要信息:
绝对不重要的信息:
typeof(Test).GetMethod("Foo")
:我不被允许。改变这个决定并不是我的权力。我可以不。 (另外,就个人而言,无论如何我都想避免它,因为它需要进行一些查找而不是静态获取数据。在重构期间它也不会自动更改,而是检查运行时,而不是编译时。) 答案 0 :(得分:0)
使用表达式:
static public class Metadata<T>
{
static public PropertyInfo Property<TProperty>(Expression<Func<T, TProperty>> property)
{
var expression = property.Body as MemberExpression;
return expression.Member as PropertyInfo;
}
}
var foo = Metadata<Test>.Property(test => test.Foo);