我有一个对象模型MyObject,它包含一个可空字节作为其属性之一。 如何对此键上的MyObjects列表进行排序,以便根据此属性的值进行升序排序,并使用最后出现空值的对象。
感谢您的建议。
答案 0 :(得分:9)
Linqs OrderBy
附带一个接受IComparer
的重载。这样您就可以按照自己的方式对对象进行排序。
快速举例:
public class NullByteComparer : IComparer<byte?>
{
public int Compare(byte? a, byte? b)
{
if (a == b)
return 0;
if (a == null)
return 1;
if (b == null)
return -1;
return return a < b ? -1 : 1;
}
}
使用它
yourObjects.OrderBy(x => x.NullByteProperty, new NullByteComparer());
答案 1 :(得分:3)
创建IComparer<byte?>
界面的自定义实现。
答案 2 :(得分:1)
使用??
运算符强制null
值到后面,如下所示:
var res = myList.OrderBy(v => (uint?)v.NullableByteProp ?? uint.MaxValue);
你需要转换为uint?
,否则你的空值将与你的0xFF一起排序。
答案 3 :(得分:1)
当null等于GetValueOrDefault
时,您可以使用Byte.MaxValue()函数提供值var orderedValues = values.OrderBy(v => v.GetValueOrDefault(Byte.MaxValue));