我收到此错误:System.ArgumentNullException:值不能为空。但这就是重点吧?如果.FreeAmount
为 null,则应在AmountList
中签入所选金额。但是,它失败了。我真的看不出我在这里做错了什么。
var amount = string.IsNullOrEmpty(formModel.FreeAmount)
? formModel.AmountList
.Where(x => x.Selected)
.Select(a => a.Value)
.SingleOrDefault()
: formModel.FreeAmount;
只有当FreeAmount
和AmountList
都为 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。