我正在尝试编写一个扩展方法,使用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#可以推断它们。据我所见,如果我只是找到正确的方法来指定扩展方法签名,应该有足够的信息(至少是最后一个)在代码片段中推断出所有内容,但根据编译器的说法,这并不是这样的。
我已经阅读了一篇关于静态扩展方法的旧博客文章,但我没有找到任何比那更近的东西。如果这成真了,我就能写:
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)
仅凭编译器推断类型成员不足够。
default(MyType)
实际上并不比使用typeof(MyType)
更棘手,所以这绝对是一个好的解决方案。您知道静态扩展方法是否被考虑用于未来的框架版本吗? - Tomas Aschanm.MyProperty
到"MyProperty"
)来使用内置的GetMember
方法并获取成员,但我找不到 lambda 表达式的正确属性... - Tomas Aschan((MemberExpression)member.Body).Member
。它的名称可以在Name
属性中找到,但由于我已经有了MemberInfo
,所以没有必要通过内置方法进行操作。谢谢! - Tomas Aschan