将List设置为空,如果它为null

时间:2016-04-27 16:47:10

标签: c# linq list

我正在尝试组合两个列表,其中一个列表可以为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();

如果它是连接的空列表,我将如何测试和处理空列表?

2 个答案:

答案 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来电时声明xAccountEmailsWhere列表。

这些列表永远不会是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();