C#条件lambda而不是if语句。值不能为null错误

C#条件lambda而不是if语句。值不能为null错误,c#,lambda,null,conditional,C#,Lambda,Null,Conditional,我得到以下错误:System.ArgumentNullException:值不能为null。但这就是重点,对吗?如果.freeamunt为空,则应在金额列表中检查所选金额。但它没有做到这一点。我真的看不出我做错了什么 var amount = string.IsNullOrEmpty(formModel.FreeAmount) ? formModel.AmountList .Where(x => x.Selected) .Select(a => a.Val

我得到以下错误:System.ArgumentNullException:值不能为null。但这就是重点,对吗?如果
.freeamunt
为空,则应在
金额列表中检查所选金额。但它没有做到这一点。我真的看不出我做错了什么

var amount = string.IsNullOrEmpty(formModel.FreeAmount)
  ? formModel.AmountList
      .Where(x => x.Selected)
      .Select(a => a.Value)
      .SingleOrDefault()
  : formModel.FreeAmount;

如果
freeamunt
AmountList
均为空,则在您发布的代码中只能获得
System.ArgumentNullException
。如果您想在这种情况下使用其他默认值,可以执行以下操作:

var amount = string.IsNullOrEmpty(formModel.FreeAmount)
    ? formModel.AmountList == null
        ? "Default value if FreeAmount and AmountList are null"
        : formModel.AmountList
            .Where(x => x.Selected)
            .Select(a => a.Value)
            .SingleOrDefault()
    : formModel.FreeAmount;
否则,如果在本例中您只想让它返回
null
(我认为这更可能,因为当前
SingleOrDefault
)的可能性很大,那么您可以使用null条件运算符(
?。
):

var amount=string.IsNullOrEmpty(formModel.FreeAmount)
? formModel.AmountList?//x、 选定)
.选择(a=>a.值)
.SingleOrDefault()
:formModel.FreeAmount;

在上述声明中

如果formModel为NULL,则三元运算符的左侧可能会导致NULL

因此,
string.IsNullOrEmpty(formModel.FreeAmount)
=>将导致TRUE

因此,三元运算符将计算:符号的左侧(true),即

formModel.AmountList
      .Where(x => x.Selected)
      .Select(a => a.Value)
      .SingleOrDefault()
这将导致System.ArgumentNullException,因为formModel值为null


所以,如果formModel为空,命令将失败,System.ArgumentNullException。

是否检查formModel是否为空?数量列表中是否有已选择的装载?请包括
formModel
的类以及
AmountList
的类。@Kostis如果
fromModel
为空,则您将获得
NullReferenceException
,而不是
ArgumentNullException
。只是一个建议:
formModel.AmountList.Where(x=>x.Selected)。DefaultIfEmpty(0)。选择(a=>a.Value)。SingleOrDefault()
这是不正确的。如果
formModel
为空,则
formModel.FreeAmount
将抛出
NullReferenceException
。它永远不会执行
string.IsNullOrEmpty
也不会到达三元运算符。如果
formModel,它可以进入三元运算符。FreeAmount
改为
formModel?。FreeAmount
-但即使如此,三元运算符仍会抛出
NullReferenceException
formModel.AmountList
      .Where(x => x.Selected)
      .Select(a => a.Value)
      .SingleOrDefault()