Not*_*ple 4 c# lambda extension-methods
我有一个辅助方法,它获取由 lambda 定义的属性的名称,其工作原理如下:
ExpressionUtil.GetName((Thing t) => t.Property); // returns "Property"
Run Code Online (Sandbox Code Playgroud)
我想将其转换为扩展方法,因此语法将采用以下形式:
((Thing t) => t.Property).GetName(); // wont compile : operator '.' cannot be applies to operand of type 'lambda expression'
Run Code Online (Sandbox Code Playgroud)
然而我似乎不能像 lambda 那样做到这一点((Thing t) => t.Property)(还不是表达式或 Func)。有没有办法编写直接应用于 lambda 的扩展方法?如果不是的话,为什么这是一件坏事呢?
你不能这样做,因为 lambda 表达式本身没有类型;它的类型由上下文确定(例如,如果将其分配给委托变量或将其作为参数传递给方法)。
由于((Thing t) => t.Property)没有类型,因此您无法对其调用扩展方法,因为编译器不知道哪些扩展方法是有效的候选方法。
但是,您可以声明一个变量并对其调用扩展方法:
Func<Thing, OtherThing> func = t => t.Property;
string name = func.GetName();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4061 次 |
| 最近记录: |