无法调用委托

时间:2013-06-29 09:41:28

标签: c#-4.0

当我形成代码表达式

Expression<Func<string, string>> sub = s => s.Substring(1, 3);
string substr = sub("Hello World");

编译器不接受我的委托电话sub("Hello World");

上述代码段有什么问题?

2 个答案:

答案 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");