【发布时间】:2010-07-24 11:06:34
【问题描述】:
我正在尝试编写一个扩展方法,该方法将使用 lambda 表达式为我提供代表给定类型成员的 MemberInfo。理想情况下,我希望能够写作
var info = MyType.GetMember(m => m.MyProperty);
或者,也可以接受
var info = typeof(MyType).GetMember(m => m.MyProperty);
甚至
var info = typeof(MyType).GetMember((MyType m) => m.MyProperty);
我有一个有效的通用方法签名,但需要我指定所有类型参数,我非常希望 C# 来推断它们。据我所知,如果我只是找到指定扩展方法签名的正确方法,那么(至少最后一个)代码 sn-ps 中应该有足够的信息来推断一切 - 但根据编译器,没有。
我读过an old blog post on static extension methods,但我找不到比这更近的东西。如果是真的,我就可以写了
public static MemberInfo GetMember<TType, TReturnType>(static TType, Expression<Func<TType, TReturnType>> member)
这将解决我的问题。但正如我所说,我似乎被实例扩展卡住了,在这种情况下
public static MemberInfo GetMember<TType, TReturnType>(this Type t, Expression<Func<TType, TReturnType>> member)
只是不足以让编译器推断类型成员。
【问题讨论】: