ReSharper 2026.1 Help

コードインスペクション:可能であればオブジェクトまたはコレクションイニシャライザーを使用する。

オブジェクトとコレクションのイニシャライザーは、より簡潔な構文を提供します。 また、イニシャライザーはマルチスレッドにも役立ちます。

オブジェクト初期化子は、コンストラクターを呼び出さずに、作成時にオブジェクトのプロパティまたはフィールドに値を割り当てるために使用されます。 オブジェクトを作成し、その直後にそのプロパティへ値を割り当てる場合、ReSharper はオブジェクトイニシャライザーの使用を提案します。

以下の例では、 CreateNewData() がオブジェクトイニシャライザーを使用しない場合、 GetCurrentData() は部分的に初期化された Data を返すことができるため、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 を実装するか、 Add メソッドを持つ場合に使用できます。 コレクションを作成し、その直後にアイテムを追加する場合、ReSharper はコレクションイニシャライザーの使用を提案します。

以下では、ReSharper が Add メソッドの呼び出しをコレクションイニシャライザーに置き換えます:

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 を使用して、選択した割り当てをコレクション初期化子に変換できます。

ReSharper: 割り当てをオブジェクト初期化子に変換する
2026 年 6 月 12 日