作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在以下方面收到错误 System.ArgumentNullException: Value cannot be null.
:
foreach (var pmt in payment.NewInvoiceViewModels
.Where(x => x.PaymentReceived != 0) ??
Enumerable.Empty<NewInvoiceViewModel>())
我要做的只是检查付款。在我迭代它之前,NewInvoiceViewModels 为 null(如果它为 null,则会导致错误)。
有没有更好的方法来实现这一点?
最佳答案
您在错误的位置使用了空合并运算符 - 当前您正在无条件地调用 payment.NewInvoiceModels
上的 Where
,然后检查结果是否为null...它永远 将是(Where
根本不返回 null)。您可能想要:
foreach (var pmt in (payment.NewInvoiceViewModels ??
Enumerable.Empty<NewInvoiceViewModel>())
.Where(x => x.PaymentReceived != 0))
不过我个人还是会提取这个:
var allModels = payment.NewInvoiceViewModels ??
Enumerable.Empty<NewInvoiceViewModel>();
foreach (var pmt in allModels.Where(x => x.PaymentReceived != 0))
或者也许引入一个扩展方法:
public static IEnumerable<T> NullToEmpty(this IEnumerable<T> source)
{
return source ?? Enumerable.Empty<T>();
}
然后:
foreach (var pmt in payment.NewInvoiceViewModels
.NullToEmpty()
.Where(x => x.PaymentReceived != 0))
关于c# - 在遍历对象之前检查对象是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19029769/
我是一名优秀的程序员,十分优秀!