Рассмотрим следующий код:
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()
{
}
}
Я хочу сохранить экземпляр MethodInfo Foo в атрибуте Boo, но проблема в том, что я не могу использовать Foo
и Test.Foo
для получения экземпляра MethodInfo
. Я не могу использовать typeof(Test).GetMethod("Foo")
(не мое решение).
Важная информация:
Абсолютно неважная информация:
typeof(Test).GetMethod("Foo")
: мне не разрешено. Это не в моих силах изменить это решение. Я не могу. (Кроме того, лично я хотел бы избежать этого, так как ему нужно сделать некоторый поиск вместо того, чтобы статически ставить данные. Также он не будет изменен автоматически во время рефакторинга и будет проверять время выполнения, а не время компиляции.)выражение выражения:
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);
Test.Foo = Test.Boo
илиTest.Foo = () => ... ;
...