@@ -83,8 +83,13 @@ private ExpressionSyntax AddTypeConversion(VBSyntax.ExpressionSyntax vbNode, Exp
8383 {
8484 switch ( conversionKind ) {
8585 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 ) ;
86+ var underlyingType = ( ( INamedTypeSymbol ) vbConvertedType ) . EnumUnderlyingType ;
87+ csNode = AddTypeConversion ( vbNode , csNode , TypeConversionKind . Conversion , addParenthesisIfNeeded , vbType , underlyingType ) ;
88+ return AddTypeConversion ( vbNode , csNode , TypeConversionKind . NonDestructiveCast , addParenthesisIfNeeded , underlyingType , vbConvertedType ) ;
89+ case TypeConversionKind . EnumCastThenConversion :
90+ var enumUnderlyingType = ( ( INamedTypeSymbol ) vbType ) . EnumUnderlyingType ;
91+ csNode = AddTypeConversion ( vbNode , csNode , TypeConversionKind . NonDestructiveCast , addParenthesisIfNeeded , vbType , enumUnderlyingType ) ;
92+ return AddTypeConversion ( vbNode , csNode , TypeConversionKind . Conversion , addParenthesisIfNeeded , enumUnderlyingType , vbConvertedType ) ;
8893 case TypeConversionKind . Unknown :
8994 case TypeConversionKind . Identity :
9095 return addParenthesisIfNeeded ? VbSyntaxNodeExtensions . ParenthesizeIfPrecedenceCouldChange ( vbNode , csNode ) : csNode ;
@@ -132,7 +137,9 @@ public TypeConversionKind AnalyzeConversion(Microsoft.CodeAnalysis.VisualBasic.S
132137 ( vbConvertedType . IsNullable ( ) && vbType . Equals ( vbConvertedType . GetNullableUnderlyingType ( ) ) ) ||
133138 vbConvertedType . SpecialType == SpecialType . System_Object ) {
134139 return TypeConversionKind . Identity ;
135- } else {
140+ } else if ( vbConvertedType . SpecialType == SpecialType . System_String ) {
141+ return TypeConversionKind . EnumCastThenConversion ;
142+ } else {
136143 return TypeConversionKind . Conversion ;
137144 }
138145 }
@@ -313,8 +320,9 @@ public enum TypeConversionKind
313320 NonDestructiveCast ,
314321 Conversion ,
315322 EnumConversionThenCast ,
323+ EnumCastThenConversion ,
316324 NullableBool ,
317- StringToCharArray
325+ StringToCharArray ,
318326 }
319327
320328 public static bool ConvertStringToCharLiteral ( Microsoft . CodeAnalysis . VisualBasic . Syntax . ExpressionSyntax node ,
0 commit comments