• ベストアンサー

のでしょう?

ラムダ式の説明やサンプルソースにはよく、OrderBy(x => x.Name) といったようにxが出てきますが、このxとはなんなのでしょう? Name以外にもいろんなプロパティがインテリセンスで出てきますが、 これはクラスですか?どこで宣言されているものですか?ただの変数ですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

まずは「ラムダ式」についてよく勉強してください。 そのxはただの「仮引数」です。 http://msdn.microsoft.com/ja-jp/library/bb397687.aspx にあるように ・引数が1つの場合は、()は必要無い ・型推論で解決できるときは、型を指定する必要が無い ということです。 前回( http://okwave.jp/qa/q8356451.html ) の Controls.OfType<TextBox>().OrderBy.(x => x.Name) から考えて、 Controls.OfType<TextBox>()によって作られた「TextBoxの配列(状のもの)」をOrderByで「指定されたラムダ式を評価したもの」の順番で並び変える であり、 「引数x に指定されるものは、 TextBoxの配列の1要素」 であることから 「引数xはTextBox型だ」 と推論されます。 引数を省略しないで書けば (TextBox x) => x.Name であり、関数風に書けば string lamba(TextBox x) { return x.Name; } ということになるでしょうか。

tranceporter
質問者

お礼

ようやく得心ががいきました。これがジェネリックプログラミングというものでしょうか。 なんだかc#は奥が深そうです。 匿名関数、LINQ、ラムダ式、・・・ また質問させてください。とても勉強になりました。ありがとうございます。

その他の回答 (1)

回答No.1

x=>x.Name は「x を受け取って x.Name を返す」 を意味する名前のない関数とみなせます。 なので x は引数ですね。

tranceporter
質問者

お礼

名前のない関数、つまり匿名関数のパラメータというわけですね。ありがとうございます。

関連するQ&A