C#Array:按降序排序,包括空值

3Pi*_*3Pi 1 c# arrays null sql-order-by

我有一个(总是4个)对象的数组,我需要通过对象成员的降序来排序.
我原以为要点它

Array = Array.OrderByDescending(p => p.Val)
Run Code Online (Sandbox Code Playgroud)

当然,当其中一个值为null时,这就会失败.所以我的目标是,但我的LINQ不符合,是:

Array = Array.OrderByDescending(p => if( p != null ) p.Val; else float.MinValue)
Run Code Online (Sandbox Code Playgroud)

如何在不必删除并稍后重新添加空值的情况下完成此排序?谢谢你的帮助.

Kir*_*oll 12

使用三元条件运算符:

Array = Array.OrderByDescending(p => p != null ? p.Val : float.MinValue)
Run Code Online (Sandbox Code Playgroud)

根据下面的评论,你不能使用的原因if/else是因为lambda的主体(右边的东西p =>)必须是一个表达式,除非你用花括号包围整个东西.所以为了说明,你可以使用if/else你想要的:

Array = Array.OrderByDescending(p => 
{
    if (p != null) return p.Val; 
    else return float.MinValue;
});
Run Code Online (Sandbox Code Playgroud)

但显然更加冗长.