Mar*_*ark 2 c# asp.net asp.net-mvc
我在以下方面收到错误System.ArgumentNullException: Value cannot be null.:
foreach (var pmt in payment.NewInvoiceViewModels
.Where(x => x.PaymentReceived != 0) ??
Enumerable.Empty<NewInvoiceViewModel>())
Run Code Online (Sandbox Code Playgroud)
我要做的就是检查payment.NewInvoiceViewModels在我迭代之前为空(如果它为null,则会导致错误).
有没有更好的方法来实现这一目标?
你有错了地方的空合并运算符-目前你打电话Where就payment.NewInvoiceModels无条件地,然后检查结果是否将是空的......它永远会(Where根本没有返回null).你可能想要:
foreach (var pmt in (payment.NewInvoiceViewModels ??
Enumerable.Empty<NewInvoiceViewModel>())
.Where(x => x.PaymentReceived != 0))
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会解除这个:
var allModels = payment.NewInvoiceViewModels ??
Enumerable.Empty<NewInvoiceViewModel>();
foreach (var pmt in allModels.Where(x => x.PaymentReceived != 0))
Run Code Online (Sandbox Code Playgroud)
或者可能会引入一种扩展方法:
public static IEnumerable<T> NullToEmpty(this IEnumerable<T> source)
{
return source ?? Enumerable.Empty<T>();
}
Run Code Online (Sandbox Code Playgroud)
然后:
foreach (var pmt in payment.NewInvoiceViewModels
.NullToEmpty()
.Where(x => x.PaymentReceived != 0))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |