@@ -82,6 +82,9 @@ public ExpressionSyntax AddExplicitConversion(Microsoft.CodeAnalysis.VisualBasic
8282 private ExpressionSyntax AddTypeConversion ( VBSyntax . ExpressionSyntax vbNode , ExpressionSyntax csNode , TypeConversionKind conversionKind , bool addParenthesisIfNeeded , ITypeSymbol vbType , ITypeSymbol vbConvertedType )
8383 {
8484 switch ( conversionKind ) {
85+ case TypeConversionKind . EnumConversionThenCast :
86+ csNode = AddTypeConversion ( vbNode , csNode , TypeConversionKind . Conversion , addParenthesisIfNeeded , vbType , ( ( INamedTypeSymbol ) vbConvertedType ) . EnumUnderlyingType ) ;
87+ return AddTypeConversion ( vbNode , csNode , TypeConversionKind . NonDestructiveCast , addParenthesisIfNeeded , vbType , vbConvertedType ) ;
8588 case TypeConversionKind . Unknown :
8689 case TypeConversionKind . Identity :
8790 return addParenthesisIfNeeded ? VbSyntaxNodeExtensions . ParenthesizeIfPrecedenceCouldChange ( vbNode , csNode ) : csNode ;
@@ -186,7 +189,7 @@ private bool TryAnalyzeCsConversion(Microsoft.CodeAnalysis.VisualBasic.Syntax.Ex
186189 return true ;
187190 }
188191 if ( isConvertToString || vbConversion . IsNarrowing ) {
189- typeConversionKind = TypeConversionKind . Conversion ;
192+ typeConversionKind = vbConvertedType . IsEnumType ( ) && ! csConversion . Exists ? TypeConversionKind . EnumConversionThenCast : TypeConversionKind . Conversion ;
190193 return true ;
191194 }
192195 } else if ( vbConversion . IsWidening && vbConversion . IsNumeric && csConversion . IsImplicit &&
@@ -309,6 +312,7 @@ public enum TypeConversionKind
309312 DestructiveCast ,
310313 NonDestructiveCast ,
311314 Conversion ,
315+ EnumConversionThenCast ,
312316 NullableBool ,
313317 StringToCharArray
314318 }
0 commit comments