3

デリゲートは明確に理解できます

delegate int del(int i);

しかし、なぜ使用できるのですか

del myDelegate = x => x * x; 

ここでの質問:

  1. ラムダ式で x が int 型であることを確認するにはどうすればよいですか?
  2. ラムダ式がintを返すことをどのように知ることができますか?
4

3 に答える 3

5

C# コンパイラは、コンテキストから のx左側にあるの型を暗黙的に把握できるほどスマートです。=>ラムダを type の変数に代入していることを認識しているためdel、コンパイラはそれxint.

戻り値の型に関する限り、コンパイラはそれxが であることを認識しているintため、式の型x * xも である必要がありますint。これが、コンパイラがラムダの戻り値の型を認識する方法です。

myDelegate同じコードは、正確なタイプが指定されていないとコンパイルされないことに注意してください。

// This does not compile!
var myDelegate = x => x*x;
于 2012-10-13T02:14:40.230 に答える
0

x を取得するには、型を指定する必要があるからです。このタイプが何であるかを何度も言わせるのではなく、このタイプを検出します。

于 2012-10-13T02:13:44.187 に答える
0

現在、lamdba 式が何を行っているかをコンパイラに判断させています。ActionFuncを使用してサブクラス化できます

アクションの戻り値の型は void ですが、Func の戻り値の型は、最後の型パラメーターとして指定したものです。両方で追加の入力を指定できます

Func<in, in2, in3, output>

int を返す場合

var f = new Func<int, int>(x => x*x);
于 2012-10-13T02:15:48.560 に答える