如果实例已经存在,是否忽略通用列表构造?

Is generic list construction ignored if the instance already exists?

我有这个代码:

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

Resharper 将其标记为问题,建议,"Replace 'if' statement with respective branch" 如果我默许,上面的代码将更改为:

_priceComplianceSummaryList = new List<PriceComplianceSummary>();

然而,R# 似乎更像是 "cat," 的腰带和吊带类型,敦促我在引用它之前始终检查它是否为 null。那么,这种表面上鲁莽的行为真的只是效率问题吗? IOW,如果 istance 变量 (_priceComplianceSummaryList) 为空,"new List<>" 是否只生成一个新列表,而不必显式检查?

"Replace 'if' statement with respective branch" R# 建议意味着当你的布尔表达式 returns false 时没有场景。例如,

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

此代码将由 R# 重构,因为 firstParam || secondParam 始终为真。

那么,您的 2 个代码示例并不总是等同的,但在您的场景中它们是等同的。