当我形成代码表达式
时Expression<Func<string, string>> sub = s => s.Substring(1, 3);
string substr = sub("Hello World");
编译器不接受我的委托电话sub("Hello World");
上述代码段有什么问题?
答案 0 :(得分:1)
因为"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#编译器很乐意执行你的代码。
答案 1 :(得分:0)
您必须首先编译表达式以获取可执行委托:
var func = sub.Compile();
string substr = func("Hello World");