0

У меня этот код:Содержит ли родовая конструкция списка, если экземпляр уже существует?

if (null == _priceComplianceSummaryList) 
{ 
    _priceComplianceSummaryList = new List<PriceComplianceSummary>(); 
} 

ReSharper флаги его в качестве вопроса, предполагая, «Заменить„если“заявление с соответствующей отрасли» Если я согласиться, приведенный выше код изменений:

_priceComplianceSummaryList = new List<PriceComplianceSummary>(); 

И все же кажется, что R # часто больше типа ремней и подтяжек «кошки», призывая меня всегда проверять, что что-то недействительно до ссылки на него. Так ли это, по-видимому, безрассудное поведение с его стороны действительно просто вопрос эффективности? IOW, делает ли «новый список <>» только генерировать новый список, если переменная istance (_priceComplianceSummaryList) равна null, без необходимости явно проверять это?

+1

«IOW, делает ли новый список <>' только генерирует новый список, если переменная istance является «null», без необходимости явно проверять это? » Нет, это не так. – Logerfo

+6

Единственная причина, по которой я могу видеть, что R # предлагает это, потому что он может определить, что '_priceComplianceSummaryList' всегда * null, когда вы делаете эту проверку, например. вы находитесь в конструкторе и нет статической инициализации поля, что делает проверку избыточной. Нет ничего особенного в ключе 'new' при создании экземпляра' List '- после присваивания' _priceComplianceSummaryList' будет * not * быть 'null' и независимо от его значения (если таковое имеется), было бы оно« null »или нет, этого больше не будет. –

+2

Можете ли вы показать код, в котором вы определяете эту переменную? Кроме того, какова область действия переменной? Пожалуйста, покажите все соответствующие коды. –

ответ

2

«Заменить оператор« с »с соответствующей ветвью« предложение R # означает, что нет сценариев, когда ваше булевское выражение возвращает false. Например,

void SomeMethod(bool firstParam) 
{ 
    var secondParam = true; 
    if (firstParam || secondParam) 
    { 
     Console.WriteLine(); 
    } 
} 

Этот код будет реорганизовать на R #, потому что firstParam || secondParam всегда верно.

Тогда ваши 2 примера кода не всегда эквивалентны, но в вашем сценарии они есть.

 Смежные вопросы

  • Нет связанных вопросов^_^