C# 条件 lambda 而不是 if 语句。值不能为空错误
C# conditional lambda instead of if statements. Value cannot be null error
我收到此错误:System.ArgumentNullException:值不能为空。但这就是重点吗?如果 .FreeAmount
为空,则应在 AmountList
中检查所选金额。但是这样做失败了。我真的看不出我做错了什么。
var amount = string.IsNullOrEmpty(formModel.FreeAmount)
? formModel.AmountList
.Where(x => x.Selected)
.Select(a => a.Value)
.SingleOrDefault()
: formModel.FreeAmount;
如果 FreeAmount
和 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;
否则,如果您只想在这种情况下 return 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;
在上面的语句中,
如果 formModel 为 NULL,则三元运算符的左 had 侧可能导致 NULL,
因此,string.IsNullOrEmpty(formModel.FreeAmount)
=> 将得到 TRUE。
因此,三元运算符将计算 : 符号的左侧 (true),即
formModel.AmountList
.Where(x => x.Selected)
.Select(a => a.Value)
.SingleOrDefault()
这将导致 System.ArgumentNullException 因为 formModel 值为 null。
因此,在 formModel 为 NULL 的情况下,命令将失败并显示 System.ArgumentNullException。
我收到此错误:System.ArgumentNullException:值不能为空。但这就是重点吗?如果 .FreeAmount
为空,则应在 AmountList
中检查所选金额。但是这样做失败了。我真的看不出我做错了什么。
var amount = string.IsNullOrEmpty(formModel.FreeAmount)
? formModel.AmountList
.Where(x => x.Selected)
.Select(a => a.Value)
.SingleOrDefault()
: formModel.FreeAmount;
如果 FreeAmount
和 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;
否则,如果您只想在这种情况下 return 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;
在上面的语句中,
如果 formModel 为 NULL,则三元运算符的左 had 侧可能导致 NULL,
因此,string.IsNullOrEmpty(formModel.FreeAmount)
=> 将得到 TRUE。
因此,三元运算符将计算 : 符号的左侧 (true),即
formModel.AmountList
.Where(x => x.Selected)
.Select(a => a.Value)
.SingleOrDefault()
这将导致 System.ArgumentNullException 因为 formModel 值为 null。
因此,在 formModel 为 NULL 的情况下,命令将失败并显示 System.ArgumentNullException。