C#条件lambda而不是if语句。值不能为null错误
我得到以下错误:System.ArgumentNullException:值不能为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
.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()