Reputation: 11003
I use ReSharper
everyday, and today I asked myself why ReSharper suggests "Use object initializer" when I do this :
MyClass myClass = new MyClass();
myClass.MyInt = 0;
myClass.MyString = string.Empty;
It gets replaced by :
MyClass myClass = new MyClass
{
MyInt = 0,
MyString = string.Empty
};
Does this optimize the execution of my code, or is it just a matter of reformatting?
Personally, I like it. But sometimes I hate it, because of this :
I can't do step-by-step
debugging :(
Upvotes: 32
Views: 18342
Reputation: 17058
The second contains less characters and so is more compact to read. You don't have to repeat myClass 2 more times, and the initialization logic is in one block.
It is really a syntactic sugar that doesn't change a thing in the generated code. If you doesn't like it, you can always disable the warning on ReSharper.
A longer post on the advantages of using Object Initializers here:
Upvotes: 29
Reputation: 11301
You can do step-by-step debugging partially if initializers are function calls:
MyClass c = new MyClass()
{
MyInt = 3,
MyString = GenerateString(9)
};
In this case, F11 will lead you straight into the GenerateString method.
EDIT: If initializers are simple values, then step-by-step debugging is meaningless anyway.
Upvotes: 6