4
 Fruit[] data = new[] {
                new Fruit {Name = "Gala",Type = "Apple",Price = 0.75m,Quantity = 10}, 
                new Fruit {Name = "Granny Smith",Type = "Apple",Price = 0.80m,Quantity = 7},
                new Fruit {Name = "Tasty",Type = "Strawberries",Price = 1.90m,Quantity = 20}
                       };

 var grouped = from fruit in data
                          group fruit by fruit.Type;

groupedタイプは:System.Linq.GroupedEnumerable<ConsoleApplication15.Fruit,string,ConsoleApplication15.Fruit>

それを見てください:ここに画像の説明を入力してください

私の質問 :

グループ化されたアイテムが含まれている場合(ienumerableを実装)-そのタイプがGroupedEnumerable

ではなく

IEnumerable <System.Linq.IGrouping<string,ConsoleApplication15.Fruit>>

なぜ彼らは新しいタイプ別名を作成したのGroupedEnumerableですか?

4

1 に答える 1

8

.Netにオブジェクトがある場合、それは具体的なタイプである必要があり、インターフェイスにすることはできません。したがって、たとえば、new IList<int>()は無効です。のようなことを行う必要がありますnew List<int>()

変数がある場合、その型はインターフェースにすることができるので、たとえば、を書くことができますIList<int> list = new List<int>()

そしてそれがまさにここで起こっていることです。変数 のタイプは次のとおりgroupedですIEnumerable<IGrouping<string,Fruit>>(ただし、を使用しているため、コードからは明確ではありませんvar)。その変数によって参照されるオブジェクトの型は、ですGroupedEnumerable<Fruit, string, Fruit>。これは、の実装で使用される内部型ですGroupBy()IEnumerableインターフェイスのインスタンスを持つことができないため、そうすることはできません。

Visual Studioデバッガーは、オブジェクトのランタイムタイプを表示します。これは、デバッガーの目的であるため、ランタイム情報を表示するためです。

于 2012-05-05T12:44:59.457 に答える