dotnet/roslyn

Code fix for CS1612 when assigning to a nested struct field or property

Open

#51,512 opened on Feb 26, 2021

View on GitHub
 (3 comments) (1 reaction) (0 assignees)C# (4,257 forks)batch import
Area-IDEIDE-CodeStylehelp wanted

Repository metrics

Stars
 (20,414 stars)
PR merge metrics
 (Avg merge 6d 17h) (256 merged PRs in 30d)

Description

It's not uncommon to write this code, then back up and realize you have to rewrite the entire assignment into three lines.

class C
{
    public S StructProperty { get; set; }

    void M()
    {
        /* ❌ CS1612 Cannot modify the return value of 'C.StructProperty' because it is not a variable
        ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */
        StructProperty.InnerProperty = 42;
    }
}

struct S
{
    public int InnerProperty { get; set; }
}

It would save me time if there was a light bulb fix 💡 Copy and set updated 'StructProperty' value:

        var structProperty = StructProperty;
        structProperty.InnerProperty = 42;
        StructProperty = structProperty;

I don't mind if it bails at a certain level of nesting because I rarely see such code, but there could be value in handling at least two struct properties at the end of the chain. (x.StructProperty.NestedStructProperty.Y = 42;)

This issue could be linked from the big table in https://github.com/dotnet/roslyn/issues/23326.

Contributor guide