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# コンパイラは、ラムダが何をしているかを示すツリーを形成するだけです。

あなたはどちらかを持つことができます

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 に答える