gpt4 book ai didi

c# - 在遍历对象之前检查对象是否为空

转载 作者:行者123 更新时间:2023-11-30 19:05:36 24 4
gpt4 key购买 nike

我在以下方面收到错误 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com