0

私はこのコードを持っている:に私は黙認した場合、「各分岐で 『もし』ステートメントを交換してください」、示唆問題としてインスタンスがすでに存在する場合、汎用リスト構築は無視されますか?

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

ReSharperのフラグを、変更上記のコードを:

_priceComplianceSummaryList = new List<PriceComplianceSummary>(); 

しかし、R#はしばしばそれが参照する前に何かがヌルかどうかをチェックするよう促すベルト&サスペンダー型の「猫」です。だからこそ、この面的に無謀な行動は、効率の問題だけですか? IOW、istance変数(_priceComplianceSummaryList)がnullの場合、明示的にチェックする必要はなく、 "new List <>"は新しいリストのみを生成しますか?

+1

"新しいリスト<>は、istance変数が' null'の場合にのみ、新しいリストを生成しますか?明示的にチェックする必要はありませんか? いいえ、そうではありません。 – Logerfo

+6

これを示唆しているR#を見ることができる唯一の理由は、このチェックを行うときに '_priceComplianceSummaryList'が* always * nullであると判断できるからです。あなたはコンストラクタにいて、フィールドの静的な初期化がないので、チェックが冗長になります。 'List 'をインスタンス化する際に、 '_priceComplianceSummaryList'という代入が' 'null'ではなく、以前にあった値があれば' 'null'になるか、' 'そうではなくなります。 –

+2

この変数を定義するコードを表示できますか?また、変数のスコープは何ですか?関連するすべてのコードを表示してください。 –

答えて

2

"それぞれの枝で" if文を置換する "R#suggestionは、ブール式がfalseを返すときにシナリオがないことを意味します。 firstParam || secondParamは常に真であるため、例えば、

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

このコードは、R#でリファクタリングします。

コードの2つの例は、必ずしも同等ではありませんが、実際のシナリオでは同じです。

関連する問題