コードインスペクション: 可能であればオブジェクトまたはコレクションイニシャライザーを使用する
オブジェクトとコレクションのイニシャライザーは、より簡潔な構文を提供します。 また、イニシャライザーはマルチスレッドにも役立ちます。
オブジェクト初期化子は、コンストラクターを呼び出さずに、作成時にオブジェクトのプロパティまたはフィールドに値を割り当てるために使用されます。 オブジェクトを作成し、その直後にそのプロパティに値を割り当てる場合、JetBrains Rider はオブジェクトイニシャライザーの使用を提案します。
以下の例では、 GetCurrentData() は部分的に初期化された Data を返す可能性があり、 CreateNewData() がオブジェクトイニシャライザーを使用しない場合、JetBrains Rider はフィールド割り当てステートメントをオブジェクトイニシャライザーで書き換えることを提案します:
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 を実装するか、 追加 メソッドを持つ場合に使用できます。 コレクションを作成し、その直後にアイテムで埋める場合、JetBrains Rider はコレクションイニシャライザーの使用を提案します。
以下では、JetBrains Rider は 追加 メソッドの呼び出しをコレクションイニシャライザーに置き換えます:
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 を使用して、選択した割り当てをコレクション初期化子に変換できます。

2026 年 6 月 12 日