JetBrains Rider 2018.2 Help

Code Inspection: Use object or collection initializer when possible

Object and collection initializers offer more concise syntax. Besides, initializers are useful in multi-threading.

Object initializers are used to assign values to an object’s properties or fields at creation time without invoking the constructor. If you create an object and then right after that assign values to its properties, JetBrains Rider suggests using an object initializer.

In the example below, GetCurrentData() can return a partly initialized Data if CreateNewData() does not use the object initializer, so JetBrains Rider suggests to rewrite the field-assignment statements with the object initializer:

Suboptimal code

After the quick-fix

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; } }

Collection initializers can be used if a collection class implements IEnumerable or has an Add method. If you create a collection and then immediately populate it with items, JetBrains Rider suggests using a collection initializer.

In the following, JetBrains Rider replaces invocations of the Add method with a collection initializer:

Suboptimal code

After the quick-fix

public void ViewCategories() { Dictionary<int, string> categories = new Dictionary<int, string>(); categories.Add(1, "Books"); categories.Add(2, "Electronics"); foreach (var с in categories) { Console.WriteLine($"{c.Key}, {c.Value}"); } }

public void ViewCategories() { Dictionary<int, string> categories = new Dictionary<int, string> {{1, "Books"}, {2, "Electronics"}}; foreach (var с in categories) { Console.WriteLine($"{c.Key}, {c.Value}"); } }

Last modified: 21 December 2018

See Also