c# - 按对象的内部字段排序 List<T>

标签 c# linq list ienumerable

考虑下面的代码

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

enum Place
{
    Left,
    Right
}

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

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

现在我的问题是如果我有一个 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>

最佳答案

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

map = map.Sort(...);

因为 List<T>.Sort 这是不可能或没有必要的正在执行 就地 排序,即它更改了原始列表,因此不返回任何内容。因此,只需删除赋值即可消除编译器错误。

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

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

关于c# - 按对象的内部字段排序 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12158391/

相关文章:

c# - 如何编写 Nhibernate 查询

python - 将列表列表与集合列表进行比较的最快方法

c# - 调用带返回值的存储过程

c# - 如何获取使用 SynchronizationContext 的任务?以及如何使用 SynchronizationContext?

c# - 如何将其转换为字典的字典

c# - 使用 DataContext 从 LINQ 查询填充 DataTable 的最快方法

sharepoint - 在共享点中将列项目添加为链接

C#,比较两种不同类型的列表

c# - 除非我引用该项目,否则无法加载 WinRT 组件

c# - 是否可以从自定义 TagHelper 调用 ViewComponent?