diff --git a/src/Compilers/CSharp/Portable/Binder/Semantics/Conversions/ConversionKindExtensions.cs b/src/Compilers/CSharp/Portable/Binder/Semantics/Conversions/ConversionKindExtensions.cs index a6b1b2fdee657..b2361704f9255 100644 --- a/src/Compilers/CSharp/Portable/Binder/Semantics/Conversions/ConversionKindExtensions.cs +++ b/src/Compilers/CSharp/Portable/Binder/Semantics/Conversions/ConversionKindExtensions.cs @@ -21,6 +21,7 @@ public static bool IsImplicitConversion(this ConversionKind conversionKind) switch (conversionKind) { case ConversionKind.NoConversion: + case ConversionKind.UnsetConversionKind: return false; case ConversionKind.Identity: diff --git a/src/Compilers/CSharp/Test/Symbol/Compilation/GetSemanticInfoTests.cs b/src/Compilers/CSharp/Test/Symbol/Compilation/GetSemanticInfoTests.cs index 8d39371bbc350..cab91a5908b77 100644 --- a/src/Compilers/CSharp/Test/Symbol/Compilation/GetSemanticInfoTests.cs +++ b/src/Compilers/CSharp/Test/Symbol/Compilation/GetSemanticInfoTests.cs @@ -5916,5 +5916,36 @@ public void GetSpecialType_ThrowsOnGreaterThanCount() Assert.True(exceptionThrown, $"{nameof(comp.GetSpecialType)} did not throw when it should have."); } + + [Fact] + [WorkItem(34984, "https://github.com/dotnet/roslyn/issues/34984")] + public void ConversionIsExplicit_UnsetConversionKind() + { + var source = +@"class C1 +{ +} + +class C2 +{ + public void M() + { + var c = new C1(); + foreach (string item in c.Items) + { + } +}"; + var comp = CreateCompilation(source); + var tree = comp.SyntaxTrees.Single(); + var model = comp.GetSemanticModel(tree); + + var root = tree.GetRoot(); + var foreachSyntaxNode = root.DescendantNodes().OfType().Single(); + var foreachSymbolInfo = model.GetForEachStatementInfo(foreachSyntaxNode); + + Assert.Equal(Conversion.UnsetConversion, foreachSymbolInfo.CurrentConversion); + Assert.True(foreachSymbolInfo.CurrentConversion.Exists); + Assert.False(foreachSymbolInfo.CurrentConversion.IsImplicit); + } } }