C# 将列表中的元素分类为其他分类

C# 将列表中的元素分类为其他分类,c#,oop,C#,Oop,我有一个列表。Foo类包含一个类型属性。类型属性是枚举 public enum Type { Arithmetic, Fraction, ... } public class Foo { public Type ProblemType { get; set; } } 我想生成另一个列表,其中它按ProblemType排序,每个列表都包含属于同一类型的Foo类。我可以想象我应该使用Enumerabl

我有一个
列表
。Foo类包含一个类型属性。类型属性是枚举

  public enum Type
  {
       Arithmetic, Fraction, ...
  }


  public class Foo
  {
      public Type ProblemType
      {
          get; set;
      }
  }
我想生成另一个列表,其中它按ProblemType排序,每个列表都包含属于同一类型的Foo类。我可以想象我应该使用Enumerable,但我不知道如何使用它们


提前感谢您

问题类型排序
,您可以试试这个

var sortedFooList = fooList.OrderBy(f => f.ProblemType);

sortedTool列表
将是
IOrderedEnumerable
。如果您想要
列表
,只需在调用
OrderBy()

后添加
.ToList()
,假设您已经有一个
列表
,您可以查询该列表以按问题类型提供有序集合:

List<Foo> myFoos = GetFooList();

var sortedFoos = myFoos.OrderBy(f => f.ProblemType);
List myFoos=get愚人();
var sortedFoos=myFoos.OrderBy(f=>f.ProblemType);
sortedFoos
是一个按Foo.ProblemType排序的枚举集合。

您可以使用以下方法:

List<List<Foo>> groupedLists
    = yourList.GroupBy(foo => foo.ProblemType)
              .OrderBy(group => group.Key)
              .Select(group => group.ToList())
              .ToList();
列表分组列表
=yourList.GroupBy(foo=>foo.ProblemType)
.OrderBy(group=>group.Key)
.Select(group=>group.ToList())
.ToList();

顺便说一句,我建议不要使用
Type
作为枚举的名称,因为与名称冲突通常不是一个好主意。您甚至可以将其命名为
ProblemType
,因为编写
public ProblemType ProblemType{get;set;}
是明确无误的。

因此您需要一个列表列表,其中每个内部列表包含具有相同
ProblemType
Foo
。如果您先排序,然后选择,您可以使用分组的
属性。我认为这比使用
First()
更清楚@svick,你完全正确。答案相应更新,谢谢:)谢谢弗里德里克。这就是我要找的