0

当我形成一个代码表达式

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

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

上面的代码段有什么问题?

4

2 回答 2

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# 编译器将很乐意执行您的代码。

于 2013-06-29T09:46:57.103 回答
0

您必须先编译表达式才能获得可执行委托:

var func = sub.Compile();
string substr = func("Hello World");
于 2013-06-29T09:45:50.787 回答