dotnet/roslyn

Property patterns and dynamic

開放

#28,933 建立於 2018年7月29日

 (3 則留言) (0 個反應) (0 位負責人)C# (4,257 個分叉)batch import
Area-CompilersBugConcept-Diagnostic ClarityFeature - Pattern Matchinghelp wanted

倉庫指標

星標
 (20,414 顆星)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 256 個 PR)

描述

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.

貢獻者指南