FirstOrDefault()无法与?? 操作者

cll*_*pse 6 c# linq

据我所知,如果记录集为空,则linq方法FirstOrDefault()返回null.为什么不能使用??运算符来对抗函数?像这样:

Double d = new Double[]{}.FirstOrDefault() ?? 0.0;
Run Code Online (Sandbox Code Playgroud)


更新

我不想检查,如果dnull后来在我的代码.并做:

Double d new Double[]{}.FirstOrDefault() == null
       ? 0.0 
       : new Double[]{}.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

... 要么:

var r = new Double[]{}.FirstOrDefault();

Double d = r == null ? 0.0 : r;
Run Code Online (Sandbox Code Playgroud)

...似乎有点矫枉过正 - 我想在一行代码中进行空检查.

Dar*_*rov 11

因为null-coalescing operator(??)仅适用于可空引用类型,而Double是值类型.您可以使用可以为空的double(double?).

  • 在这种情况下,即使它确实起作用,"?? 0.0"也是多余的. (6认同)

Jam*_*ran 11

实际上,FirstOrDefault<T>()返回T,这是一个值或default(T).

default(T)null或者(T)0是值类型(如double)


Ben*_*son 6

该方法称为FirstOrDefault而不是FirstOrNull,即它将返回0,默认值为double,因此不需要??.