当我形成一个代码表达式
Expression<Func<string, string>> sub = s => s.Substring(1, 3);
string substr = sub("Hello World");
编译器不接受我的委托调用sub("Hello World");
上面的代码段有什么问题?
当我形成一个代码表达式
Expression<Func<string, string>> sub = s => s.Substring(1, 3);
string substr = sub("Hello World");
编译器不接受我的委托调用sub("Hello World");
上面的代码段有什么问题?
因为"Sub"
不再是代表。"Sub"
是一个表达式树。
C# 编译器不会将其转换为可执行方法。C# 编译器只会形成一棵树,指示 lambda 正在做什么。
你可以有
Func<string, string> sub = s => s.Substring(1, 3);
String getSubstring = sub("Hello World");
(或)编译你的表达式树
Expression<Func<string, string>> sub = s => s.Substring(1, 3);
Func<string, string> fn = sub.Compile();
string str = fn("Hello World");
:) 现在 C# 编译器将很乐意执行您的代码。
您必须先编译表达式才能获得可执行委托:
var func = sub.Compile();
string substr = func("Hello World");