我正在尝试组合两个列表,其中一个列表可以为null。我知道您不应该使用空列表,所以我尝试在将它们组合之前将它们设置为空列表。问题是,我只能在我尝试连接时检查第二个列表是否为空,请参阅下文!
List<AccountAlert> xAccountEmails = new List<AccountAlert>();
List<AccountAlert> xAccountPhones = new List<AccountAlert>();
///Lots of things happen
//Below throws a compiler error cannot implicity convert IEnumerable to Generic.List
xAccountEmails = xAccountStuff.Where(x => x.prop == "prop").ToList() ?? Enumerable.Empty<AccountAlert>();
// Below throws the same compiler error
xAccountEmails = xAccountEmails ?? Enumerable.Empty<AccountAlert>();
//Below works!
xAccountPhones = xAccountStuff.Where(x => x.prop == "prop").ToList();
xAccountCombined = xAccountEmails.Concat(xAccountPhones ?? Enumerable.Empty<AccountAlert>()).ToList();
如果它是连接的空列表,我将如何测试和处理空列表?
答案 0 :(得分:2)
ToList
永远不会返回null。您不需要所有null检查并转换为列表。如果您将变量声明为IEnumerable<AccountAlert>
,则可以执行以下操作:
xAccountEmails = xAccountStuff.Where(x => x.prop == "prop");
xAccountPhones = xAccountStuff.Where(x => x.prop == "prop");
xAccountCombined = xAccountEmails.Concat(xAccountPhones);
答案 1 :(得分:1)
首先,检查xAccountStuff
null
,然后根据需要,可以在执行xAccountEmails
来电时声明xAccountEmails
和Where
列表。
这些列表永远不会是null
,可能是空的,但不是null
。
xAccountStuff = xAccountStuff ?? new List<AccountAlert>();
var xAccountEmails = xAccountStuff.Where(x => x.prop == "prop1").ToList();
var xAccountPhones = xAccountStuff.Where(x => x.prop == "prop2").ToList();
var xAccountCombined = xAccountEmails.Concat(xAccountPhones).ToList();