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



我收到此错误:System.ArgumentNullException:值不能为空。但这就是重点吧?如果.FreeAmount为 null,则应在AmountList中签入所选金额。但是,它失败了。我真的看不出我在这里做错了什么。

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

只有当FreeAmountAmountList都为 null 时,您发布的代码才会得到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有可能(,那么您可以使用空条件运算符 (?.(:

var amount = string.IsNullOrEmpty(formModel.FreeAmount)
? formModel.AmountList? // <-- The '?' will return null if AmountList is null
.Where(x => x.Selected)
.Select(a => a.Value)
.SingleOrDefault()
: formModel.FreeAmount;

在上面的语句中,

如果表单模型为 NULL,则三元运算符的左侧可能导致 NULL,

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

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

formModel.AmountList
.Where(x => x.Selected)
.Select(a => a.Value)
.SingleOrDefault()

这将导致 System.ArgumentNullException,因为 formModel 值为空。

因此,在formModel为NULL的情况下,该命令将失败,并显示System.ArgumentNullException。

相关内容

  • 没有找到相关文章

最新更新