コード式を形成するとき
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# コンパイラは、ラムダが何をしているかを示すツリーを形成するだけです。
あなたはどちらかを持つことができます
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");