【发布时间】:2016-07-13 18:34:48
【问题描述】:
我有这个代码:
if (null == _priceComplianceSummaryList)
{
_priceComplianceSummaryList = new List<PriceComplianceSummary>();
}
Resharper 将其标记为问题,建议“用相应的分支替换 'if' 语句”如果我默认,上面的代码将更改为:
_priceComplianceSummaryList = new List<PriceComplianceSummary>();
然而,R# 似乎更像是“猫”的腰带和吊带类型,敦促我在引用它之前总是检查某些东西是否为空。那么,这种表面上鲁莽的行为真的只是效率问题吗? IOW,“new List”是否仅在 istance 变量 (_priceComplianceSummaryList) 为空时才生成新列表,而无需明确检查?
【问题讨论】:
-
"IOW,
new List<>是否仅在 istance 变量为null时才生成新列表,而无需明确检查?"不,它没有。 -
我能看到 R# 建议这样做的唯一原因是因为它可以确定
_priceComplianceSummaryList在您进行此检查时始终为空,例如您在构造函数中,并且没有对该字段进行静态初始化,从而使检查变得多余。在实例化List<T>时,new关键字没有什么特别之处 - 在赋值之后_priceComplianceSummaryList将不会 成为null,无论它之前有什么(如果有的话)值,都可以null与否,将不再有。 -
你能显示你定义这个变量的代码吗?另外,变量的范围是什么?请显示所有相关代码。
-
@YacoubMassad:现在它就在那里:var _priceComplianceSummaryList = new List
();所以我想那时它不可能是空的。
标签: c# resharper generic-list branch-prediction object-construction