私は、なぜコードの一部がコンパイルに失敗し、他のコンパイルがうまくいくのかという良い説明を探しています。ラムダステートメントのまわりのかっこで構文エラーが発生するのはなぜですか?
の失敗:
richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));
がエラーに
メソッド名を与えます右
MethodInvoker(
後の括弧に
を期待。どうやら、私はラムダステートメントをかっこで囲むことはできません。
コンパイル:
richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));
質問がある - なぜですか?
ラムダ式ではそうではないことがわかっていれば、括弧で任意のメソッドパラメータをラップすることができるとはいつも思っていました。私は彼らが幾分特別であることを理解していますが、私はまだこれに正当な理由は見当たりません。たぶん私は構文について何かを理解していないかもしれません。私は本当にそれを取得したいと思います。
ちなみに、これはVS2008、.NET 3.5 SP1で、VS2010と.NET 4ではまだテストされていません。
ありがとうございます。好奇心の外に - そのような場所の例を教えてください。 – Dyppl
@Dyppl: 'Func F(){return(()=> 1); } 'は合法ですが、仕様に従ってはいけません。 –
jason
ありがとう!さて、私の質問については少し気分が良くなりました。そのような矛盾はあなたの頭の中で最終的に混乱するでしょう – Dyppl