你得放錯了地方的空合併運算符 - 目前你正在呼籲payment.NewInvoiceModels
Where
無條件然後檢查結果是否爲空。 ..它從來沒有將(Where
根本不返回空)。你可能想:
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))
你方法是正確的。然而,你可以編寫一個通用的擴展方法來改進它。 http://stackoverflow.com/questions/11734380/check-for-null-in-foreach-loop –
嗨Emrie - 謝謝 - 我認爲這是正確的,但如果對象是空的,我得到的值不能爲空錯誤 - 這就是我想要解決的問題。與其他問題的聯繫是我正在做的(我相信)。謝謝,Mark – Mark
@emrenevayeshirazi:不,這種方法目前絕對*不*正確。調用'Enumerable.Where(null,predicate)'會拋出異常 - 就像OP報告一樣。 –