2

考虑下面的代码

class Pin
{
   string Name; //can be either Numerical or AlphaNum
}

enum Place
{
    Left,
    Right
}

class Map
{
   Pin pin;
   Place Place;
   Rectangle Rect;
}

' PinsName字段只能是数字或字母数字,所以我通过字符串来支持两者。

现在我的问题是,如果我有一个List<Map>如何按 Pin 的名称字段对这个列表进行排序?我尝试了下面的代码,但它无法编译:

map.Sort((x, y) => x.Pin.Name.CompareTo(y.Pin.Name)); 
//Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<DataModels.PinMap>
4

3 回答 3

9

您显示的代码不会产生该编译器错误。我假设您正在尝试将结果分配给新变量或自身。像这样的东西:

map = map.Sort(...);

这与就地List<T>.Sort排序一样是不可能或没有必要的,即它会更改原始列表,因此不会返回任何内容。因此,简单地删除分配应该会使编译器错误消失。

如果您不想要就地排序,只需Enumerable.OrderBy结合使用ToList来生成一个新列表:

var result = map.OrderBy(x => x.pin.Name).ToList();
于 2012-08-28T11:35:42.047 回答
1

LINQ 救援:

var ordered = map.OrderBy(x => x.pin.Name);

当然,假设地图中没有一个大头针是null. 如果它可以为空,那么:

var ordered = map.Where(x => x.pin != null).OrderBy(x => x.pin.Name);
于 2012-08-28T11:36:18.203 回答
0

使用 Linq。

map = (from a in allAgents
      orderby a.AgentId
      select a).ToList<Map>();
于 2012-08-28T11:41:39.770 回答