8

私はC#3.0の新しいもので遊んでいて、このコード(ほとんどはMSDNから取得)を持っていますが、真、偽、真...しか取得できず、実際の値は取得できません:

        int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

        var oddNumbers = numbers.Select(n => n % 2 == 1);

        Console.WriteLine("Numbers < 5:");
        foreach (var x in oddNumbers)
        {
            Console.WriteLine(x);
        }

整数のリストを表示するように修正するにはどうすればよいですか?

4

2 に答える 2

25

「選択」を「場所」に変更します

    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

    var oddNumbers = numbers.Where(n => n % 2 == 1);

    Console.WriteLine("Odd Number:");
    foreach (var x in oddNumbers)
    {
        Console.WriteLine(x);
    }

「Select」メソッドは、各要素 (true/false) のラムダ結果の新しいリストを作成しています。「Where」メソッドは、ラムダに基づいてフィルタリングしています。

C# では、次の構文を使用することもできます。

        var oddNumbers = from n in numbers
                         where n % 2 == 1
                         select n;

コンパイラはこれを次のように変換します。

var oddNumbers = numbers.Where(n => n % 2 == 1).Select(n => n);
于 2008-10-28T01:30:21.437 に答える
5
numbers.Select(n => n % 2 == 1);

これをに変更

numbers.Where(n => n % 2 == 1);

select が行うことは、あるものを別のものに「変換」することです。したがって、この場合、n を「n % 2 == 1」(ブール値) に「変換」しているため、すべての true と false が得られます。

通常、物のプロパティを取得するために使用されます。たとえば、Personオブジェクトのリストがあり、それらの名前を取得したい場合は、次のようにします。

var listOfNames = listOfPeople.Select( p => p.Name );

これは次のように考えることができます。

  • 次のメソッドを使用して、人のリストを文字列のリストに変換します: ( p => p.Name)

コレクションのサブセットを "選択" ("フィルタリング" という意味で) するには、Where を使用する必要があります。

ひどいネーミングをしてくれたマイクロソフトに感謝

于 2008-10-28T01:33:47.233 に答える