dotnet/roslyn

Property patterns and dynamic

Open

#28,933 opened on Jul 29, 2018

View on GitHub
 (3 comments) (0 reactions) (0 assignees)C# (20,414 stars) (4,257 forks)batch import
Area-CompilersBugConcept-Diagnostic ClarityFeature - Pattern Matchinghelp wanted

Description

Version Used: SharpLab for branch features/recursive-patterns from 24 Jul 2018 (commit b364cfc)

Steps to Reproduce:

Try to compile the following code:

class C
{
    void M(dynamic o)
    {
        _ = o is { Foo: 42 };
    }
}

Expected Behavior:

Since code like o is { Foo: 42 } normally compiles to the equivalent of o != null && o.Foo == 42 and since that code is valid for o of type dynamic, I would expect the above method to compile.

Actual Behavior:

error CS0117: 'dynamic' does not contain a definition for 'Foo'

I think the error message is somewhat confusing, because the whole point of dynamic is that it's not checked at compile time whether a member exists.


As usual with work-in-progress features, it's not clear to me if this is by design, not implemented yet, just a confusing error message or an actual bug, so feel free to handle this issue accordingly.

Contributor guide