我有一个 List 对象,其中包含以下类型的项目
public class Item{
public int Type; //this can be only 0 or 1
public string Text;
}
我想先按类型对整个列表进行排序,然后再按文本对类型为 1 的项目进行另一次排序?
如何实现?
非常感谢
明
最佳答案
这是我的做法。
var ordered = list.OrderBy(i => i.Type == 0 ? "" : i.Text);
这是假设没有空文本字符串,其中 i == 0。如果您不能做出该假设,则以下方法可行:
var ordered = list.OrderBy(i => i.Type).ThenBy(i => i.Type == 0 ? "" : i.Text);
通过为所有类型为 0 的项目赋予相同的值,您将保留它们的初始顺序,同时按其文本值对其他项目进行排序。
旁注,这是一种代码味道:
public int Type; //this can be only 0 or 1
乍一看,这听起来应该是 bool 值或自定义 enum
类型。在深入了解您要执行的操作后,听起来您可能不希望 Text
在 Type 为 0 时甚至成为合法值。如果是这种情况,您应该考虑使用类继承来实际区分一种项目类型和另一种项目类型。
关于c# - 如何对通用列表中的部分项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6496956/