2016-01-25 7 views
1

Рассмотрите приведенный ниже фрагмент кода. Мне нужно вызвать метод CreateOrAddToLists() в цикле. Первый раз, когда вызывается метод два списка casedata.Cases и casedata.Documents будет нулевым, следовательно, я могу заполнить назначая cases к casedata.Cases так:Добавить список в другой список, который является либо нулевым, либо нет.

casedata.Cases = cases;

При любом последующем вызове CreateOrAddToLists() перечисляет casedata.Cases и casedata.Documents будет не может быть нулевым, и я могу добавить новые данные в списки с помощью 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? Могу ли я сделать это в строке кода?

+0

Что именно ты после этого? Мне кажется хорошо? – James

+1

'(casedata.Documents ?? (casedata.Documents = новый список ())). AddRange (документы);' - но я бы не сказал, что это лучше или лучше. Сокращение кода не обязательно делает его лучше или умнее - сделать его читабельным более важным, потому что вы тот, кто будет его поддерживать в будущем. – Rhumborl

ответ

6

В конструкторе для CaseData экземпляр двух объектов списка, тогда вы будете уверены, что они не будут пустыми, и вы можете просто использовать AddRange.

public CaseData() 
{ 
    Cases = new List<Case>(); 
    Documents = new List<Document>(); 
} 
4

Это более ясно:

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

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

Я принял ответ @Steve, поскольку он является более правильным ответом, но пока что в моем собственном коде я буду использовать ваш ответ, потому что он ясен и полезен и может быть легко реализован. – hsop