考虑以下代码
class Pin
{
string Name; //can be either Numerical or AlphaNum
}
enum Place
{
Left,
Right
}
class Map
{
Pin pin;
Place Place;
Rectangle Rect;
}
Pin
' Name
字段只能是数字或字母数字,所以我按字符串来支持两者。
现在我的问题是,如果我有一个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>
答案 0 :(得分:9)
您展示的代码不会产生编译器错误。我假设您正在尝试将结果分配给新变量或自身。像这样:
map = map.Sort(...);
这是不可能或不必要的,因为List<T>.Sort
正在进行就地排序,即它会更改原始列表,因此不会返回任何内容。因此,简单地删除赋值应该会使编译器错误消失。
如果您不想进行就地排序,只需将Enumerable.OrderBy
与ToList
结合使用即可生成新列表:
var result = map.OrderBy(x => x.pin.Name).ToList();
答案 1 :(得分:1)
LINQ救援:
var ordered = map.OrderBy(x => x.pin.Name);
当然,假设地图中的任何一个引脚都不是null
。如果它可以为null,那么:
var ordered = map.Where(x => x.pin != null).OrderBy(x => x.pin.Name);
答案 2 :(得分:0)
使用Linq。
map = (from a in allAgents
orderby a.AgentId
select a).ToList<Map>();