Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Rule Idea: Do not nest collection initializer in object initializer #9680

Open
Tim-Pohlmann opened this issue Oct 9, 2024 · 1 comment
Labels
Area: C# C# rules related issues. Type: Rule Idea Idea for a rule that has NOT been specified.

Comments

@Tim-Pohlmann
Copy link
Contributor

Nesting a collection initializer inside an object initializer can have unexpected side effects or lead to crashes:

var x = new Evil { Arguments = { "two", "three" } };
Console.WriteLine(x.Arguments.Count);    // 3!

class Evil  
{
    public List<string> Arguments { get; } = [ "one" ];
}

SharpLab

var x = new Evil { Arguments = { "two", "three" } };    // NRE!

class Evil  
{
    public List<string> Arguments { get; }
}

SharpLab

Even if the argument is initialized with an empty collection (and the constructor does not do any shenanigans either), this kind of code relies heavily on implementation details and is unintuitive to understand.

@Tim-Pohlmann Tim-Pohlmann added Area: C# C# rules related issues. Type: Rule Idea Idea for a rule that has NOT been specified. labels Oct 9, 2024
@pavel-mikula-sonarsource
Copy link
Contributor

pavel-mikula-sonarsource commented Oct 9, 2024

Same likely applies to dictionary initializer(s) too. Basically any sugar that is translated to .Add calls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: C# C# rules related issues. Type: Rule Idea Idea for a rule that has NOT been specified.
Projects
None yet
Development

No branches or pull requests

2 participants