我正在排序一些IEnumerable对象:
var sortedObjects = objects.OrderBy(obj => obj.Member)
Run Code Online (Sandbox Code Playgroud)
成员属于某一IComparable类型.这种似乎把对象obj.Member == null放在顶部.这大致是我想要的行为,但是我可以认为这对于未来的.NET框架来说是稳定的吗?有没有办法让这种'空虚低'的行为更明确?
Che*_*hen 23
使行为更明确:
var sorted = objects.OrderBy(o => o.Member == null).ThenBy(o => o.Member);
Run Code Online (Sandbox Code Playgroud)
Jas*_*own 18
来自MSDN的IComparable:
根据定义,任何对象都比较大于(或跟随)null,并且两个空引用相互比较相等.
因此,null对象被认为小于非null对象.如果按升序排序,您将首先获得空值.
一种选择是使用带IComparer <T>的OrderBy的重载,并自己实现以将这种期望编码化:
http://msdn.microsoft.com/en-us/library/bb549422.aspx