关于"成员"的C#扩展方法

Ste*_*ger 6 c# lambda extension-methods

我有一些扩展方法,可以像这样使用:

MyType myObject; 
string displayName = myObject.GetDisplayName(x => x.Property);
Run Code Online (Sandbox Code Playgroud)

这里的问题是它需要一个实例,即使扩展方法只需要类型MyType.因此,如果没有实例,则需要像这样调用:

string displayName = BlahBlahUtility.GetDisplayName((MyTpe x) => x.Property);
Run Code Online (Sandbox Code Playgroud)

哪个不再那么好了.

有没有办法为这种情况编写更好的语法?

我真正想做的是这(伪语言):

string displayName = MyType.Property.GetDisplayName()
Run Code Online (Sandbox Code Playgroud)

这当然不适用于C#.

但是这样的事情呢:

string displayName = ((MyType x) => x.Property).GetDisplayName();
Run Code Online (Sandbox Code Playgroud)

这也是不可能的(在lambda之后,不接受点).

有任何想法吗?


编辑:

我的"最喜欢的语法" MyType.Property.GetDisplayName()似乎有误导性.我这里不讨论静态属性.我知道这种语法是不可能的.我只是试图用伪语言表示,需要哪些信息.这将是理想的,每一个额外的东西只是语法开销.任何与此接近的工作语法都会很棒.

我不想写一定的扩展方法.我想要一个简单,可读和编译时安全的语法,使用任何语言功能.

Svi*_*ish 2

查看Lokad 共享库中的Express和类。认为他们可以帮助你想做的事情。在这里阅读更多内容:Reflect