LINQ"MaxOrDefault"?

Tel*_*avo 26 c# linq linq-to-objects

我是LINQ的新手.我需要按如下方式计算new_id:

public class C_Movement
{
  public int id=-1;
  public static ObservableCollection<C_Movement> list=new ObservableCollection<C_Movement>();
  // ...
}

int new_id = (C_Movement.list.Count==0) ? 0 : C_Movement.list.Max(x => x.id)+1;
Run Code Online (Sandbox Code Playgroud)

是否有LINQ方法来压缩该表达式,因此我不必使用"?:"结构?问题是,当C_Movement.list不包含任何元素时,C_Movement.list.Max(x => x.id)返回null(我希望它返回-1,而不是).

谢谢.

Sno*_*ear 53

DefaultIfEmpty方法应该有所帮助:

int new_id = C_Movement.list.Select(x => x.id).DefaultIfEmpty(-1).Max()+1;
Run Code Online (Sandbox Code Playgroud)


Vla*_*mir 5

int new_id = C_Movement.list.Max(x => (int?)x.id).GetValueOrDefault(-1) + 1;

其中GetValueOrDefault是一个方法Nullable<T>

  • 值得注意的是,对于可空类型的集合,只有 Max() 对空序列返回 null,而 Max() 通常会引发异常。 (6认同)