将一个可能为空的列表添加到另一个列表中。

6
考虑下面的代码片段。我需要在循环中调用CreateOrAddToLists()方法。第一次调用该方法时,casedata.Casescasedata.Documents这两个列表将为null,因此我可以通过像这样将cases赋值给casedata.Cases来填充它们: casedata.Cases = cases; 在任何后续调用CreateOrAddToLists()时,列表casedata.Casescasedata.Documents将不为null,我可以使用AddRange()向列表中添加新数据: casedata.Cases.AddRange(cases);
var casedata = new CaseData(); //contains lists to get populated

private void CreateOrAddToLists()
{   
    var cases = new List<Case>(); //gets data with from database
    var documents = new List<Document>(); //gets data with from database

    if (casedata.Cases == null)
    {
        casedata.Cases = cases;
    }
    else
    {
        casedata.Cases.AddRange(cases);
    }
    if (casedata.Documents == null)
    {
        casedata.Documents = documents;
    }
    else
    {
        casedata.Documents.AddRange(documents);
    }
}

AddRange之前有更好或更简洁的方法来进行空值检查吗?我能用一行代码来完成吗?


你到底想要什么?在我看来,这似乎没问题。 - James
1
(casedata.Documents ?? (casedata.Documents = new List<Document>())).AddRange(documents); - 但我不会说这样做更好或更整洁。使代码更小并不一定使它更好或更聪明 - 使其可读性更重要,因为您将来将是维护它的人。 - Rhumborl
2个回答

9
CaseData的构造函数中实例化这两个列表对象,这样您就可以确保它们不会为空,然后您可以直接使用AddRange
public CaseData()
{
    Cases = new List<Case>();
    Documents = new List<Document>();
}

6

更清晰明了:

casedata.Cases = casedata.Cases ?? new List<Case>();
casedata.Cases.AddRange(cases);

casedata.Documents = casedata.Documents ?? new List<Document>();
casedata.Documents.AddRange(documents);

我已经接受了@Steve提供的答案,因为它是更正确的答案,但是在我的代码中,我将使用你的答案,因为它清晰有用且易于实现。 - hsop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接