如何使用System.Collections.Generic.List<T>.Sort
對可爲null的int屬性排序列表?.net System.Collections.Generic.List <T> .sort nullable int
或者我必須做一個手動排序,因爲這是不可能的?
如何使用System.Collections.Generic.List<T>.Sort
對可爲null的int屬性排序列表?.net System.Collections.Generic.List <T> .sort nullable int
或者我必須做一個手動排序,因爲這是不可能的?
首先,您需要確定如何將空值與具有值的項目進行比較。然後你可以進行比較。例如,如果你決定,空總是「小於」非空:
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;
}
}
僅供參考,如果您想要考慮'null'小於非空值,那麼這就是默認的排序實現,只需調用'list.Sort( )'但是很好的例子。 – 2012-08-03 21:20:10
由於新手的開發要空首創,他們可以使用默認的排序實現:
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的解決方案。
編輯:剛剛意識到,這可能是對列表中的一類的可爲空的屬性,在這種情況下使用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);
});
你已經試過了什麼? – 2012-08-03 21:08:38
......結果出了什麼問題? – 2012-08-03 21:09:29
你的行爲是什麼?你希望第一次,最後一次? – vcsjones 2012-08-03 21:09:56