2011-08-17 13 views
2

私はlinqとラムダ式の使い方を理解しようとしています。Enumerable.Selectのラムダ式

まず、誰かが私に良いチュートリアルを教えることができたら、それは最も感謝しています。第二に

:私はSelectメソッドを使用して、特定の値に等しいすべての値を選択しようとしている

私は選択が今、この目的のために、私はこれが動作しない5.

int[] numbers = { 1, 2, 3, 4, 5, 5, 5, 6, 7, 8 }; 
IEnumerable<int> res = numbers.Select(x=>5);  

に等しいすべての数字を選択したい

Select<TSource,TResult>(...lambda expression...) 

で定義できることに気づきました、私はちょうどこれがどのように動作するのか分かりません。 そして、どのような状況で私はTSourceTResultを定義する必要がありますか?

ありがとうございます!

答えて

14

Select()は、古いシーケンスの各メンバーを新しいシーケンスの新しいメンバーに投影するために使用されます。フィルタリングするには、あなたはWhere()を使用します。

var evens = numbers.Where(x => x % 2 == 0); 
var theFiveSequence = numbers.Where(x => x == 5); 

2によって各数値を掛けるかもしれないSelect()を使用する例:

var doubledNumbers = numbers.Select(x => 2*x); 

あなたも、一緒にこれらの方法を組み合わせることができます。

var doubledNumbersLessThanTen = numbers.Select(x => 2*x).Where(x < 10); 

をLINQについて覚えておくべき2つの重要なこと:

  1. 基本配列の要素は(ほぼ常に)ではなく、が変更されています。古いシーケンスから新しいシーケンスを作成します。
  2. 作成したクエリは遅延評価されます。あなたはforeachループ内でそれらを使用するまで、それらの結果を得る、または.ToList().ToArray()など
+0

感謝を呼び出すことはありません、 はいiv'eは、それが(呼び出さToListメソッドiv'eと未定義可算、返すことに気づきました)それに。 TSourceとTResultはどのようなものなのですか?予想されるソースと結果の予期しているものは何ですか? –

+1

@eran LINQ拡張メソッドはすべて汎用です。 'TSource'はソースシーケンスに格納されている型、' TResult'は新しいシーケンスの型です。コンパイラがそれらをあなたのために*推定するので、あなたはそれらをほとんど指定しません。 – dlev

+0

あなたのご協力とお悔やみのおかげで –