代码检查:在可能的情况下使用对象或集合初始化器
对象和集合初始化器提供了更简洁的语法。 此外,初始化器在多线程中非常有用。
对象初始化器用于在创建对象时为其属性或字段赋值,而无需调用构造函数。 如果您创建一个对象,然后紧接着为其属性赋值,ReSharper 会建议使用对象初始化器。
在下面的示例中,如果 CreateNewData() 未使用对象初始化器, GetCurrentData() 可能会返回部分初始化的 数据 ,因此 ReSharper 建议使用对象初始化器重写字段赋值语句:
public class DataHandler
{
private volatile Data _myData;
public void CreateNewData()
{
_myData = new Data(); // warning
_myData.Value1 = "Value1";
_myData.Value2 = "Value2";
}
public Data GetCurrentData()
{
return _myData;
}
}
public class Data
{
public string Value1 { get;set; }
public string Value2 { get; set; }
}
public class DataHandler
{
private volatile Data _myData;
public void CreateNewData()
{
_myData = new Data
{
Value1 = "Value1",
Value2 = "Value2"
};
}
public Data GetCurrentData()
{
return _myData;
}
}
public class Data
{
public string Value1 { get;set; }
public string Value2 { get; set; }
}
如果集合类实现了 IEnumerable 或具有 添加 方法,则可以使用集合初始化器。 如果您创建一个集合,然后立即用项目填充它,ReSharper 会建议使用集合初始化器。
在以下示例中,ReSharper 将 添加 方法的调用替换为集合初始化器:
public void ViewCategories()
{
var categories = new Dictionary<int, string>();
categories.Add(1, "Books");
categories.Add(2, "Electronics");
foreach (var c in categories)
{
Console.WriteLine($"{c.Key}, " + $"{c.Value}");
}
}
public void ViewCategories()
{
var categories = new Dictionary<int, string> {{1, "Books"}, {2, "Electronics"}};
foreach (var c in categories)
{
Console.WriteLine($"{c.Key}, " + $"{c.Value}");
}
}
如果您选择禁用此检查,您仍然可以通过 上下文操作 Alt+Enter 将选定的赋值转换为集合初始化器:

最后修改日期: 2025年 9月 27日