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.

贡献者指南