- ベストアンサー
のでしょう?
ラムダ式の説明やサンプルソースにはよく、OrderBy(x => x.Name) といったようにxが出てきますが、このxとはなんなのでしょう? Name以外にもいろんなプロパティがインテリセンスで出てきますが、 これはクラスですか?どこで宣言されているものですか?ただの変数ですか?
- みんなの回答 (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; } ということになるでしょうか。
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
x=>x.Name は「x を受け取って x.Name を返す」 を意味する名前のない関数とみなせます。 なので x は引数ですね。
お礼
名前のない関数、つまり匿名関数のパラメータというわけですね。ありがとうございます。
お礼
ようやく得心ががいきました。これがジェネリックプログラミングというものでしょうか。 なんだかc#は奥が深そうです。 匿名関数、LINQ、ラムダ式、・・・ また質問させてください。とても勉強になりました。ありがとうございます。