dotnet/roslyn

Unexpected diagnostic in `with` expression with indexer on a struct

Offen

#81.666 geöffnet am 12.12.2025

 (1 Kommentar) (0 Reaktionen) (0 zugewiesene Personen)C# (4.257 Forks)batch import
Area-CompilersConcept-Diagnostic Clarityhelp wanted

Repository-Metriken

Stars
 (20.414 Sterne)
PR-Merge-Metriken
 (Durchschn. Merge 6T 17h) (256 gemergte PRs in 30 T)

Beschreibung

Although this is an error scenario, the first diagnostic is unexpected.

    [Fact]
    public void TODO2()
    {
        var src = """
var c = new S() with { [0] = 1 };

public struct S
{
    public int this[int i] { set { } }
}
""";

        CreateCompilation(src).VerifyEmitDiagnostics(
            // (1,24): error CS0131: The left-hand side of an assignment must be a variable, property or indexer
            // var c = new S() with { [0] = 1 };
            Diagnostic(ErrorCode.ERR_AssgLvalueExpected, "[0]").WithLocation(1, 24),
            // (1,24): error CS0747: Invalid initializer member declarator
            // var c = new S() with { [0] = 1 };
            Diagnostic(ErrorCode.ERR_InvalidInitializerElementInitializer, "[0] = 1").WithLocation(1, 24));
    }

Contributor Guide