.net System.Collections.Generic.List<;T>;.对可为null的int进行排

本文关键字:null int gt Generic Collections System List lt net | 更新日期: 2024-09-22 23:16:18

如何使用System.Collections.Generic.List<T>.Sort对可为null的int属性上的列表进行排序?

还是我必须手动排序,因为这是不可能的?

.net System.Collections.Generic.List<;T>;.对可为null的int进行排

首先,您需要决定null值与具有值的项的比较方式。然后您可以进行比较。例如,如果您决定null总是"小于"非null:

list.Sort((x,y) => {
  if(!x.Nullable.HasValue) {
     if(!y.Nullable.HasValue) return 0; // equal
     else return -1; // y is greater
  }
  else
  {
    if(!y.Nullable.HasValue) return 1; // x is greater
    if(x == y) return 0; // equal
    if(x < y) return -1; // y is greater
    else return 1;
  }
}

由于他们想要空的第一个,他们可以使用默认的排序实现:

List<int?> myList = new List<int?>() { 2, -3, null, 9 };
myList.Sort();
for (int i = 0; i < myList.Count; i++)
    Console.WriteLine(myList[i]);  //null, -3, 2, 9

如果您确实需要不同的订单,请使用Peter Ritchie的解决方案。

EDIT:刚刚意识到,这可能是针对列表中类的一个可为null的属性,在这种情况下,使用LINQ的默认OrderBy实现:

public class MyClass
{
    public int? Value;
}
List<MyClass> myList = new List<MyClass>()
{
    new MyClass() { Value = 2},
    new MyClass() { Value = -3},
    new MyClass() { Value = null},
    new MyClass() { Value = 9},
};
var sorted = myList.OrderBy(entry => entry.Value).ToList();
for (int i = 0; i < sorted.Count; i++)
    Console.WriteLine(sorted[i].Value); //null, -3, 2, 9

如果您不想使用LINQ,另一种情况是使用List.Sort方法的默认比较器:

myList.Sort((x, y) =>
    {
        return System.Collections.Generic.Comparer<int?>.Default.Compare(x.Value, y.Value);
    });