@@ -82,11 +82,24 @@ private async Task<CSharpSyntaxNode> ConvertBinaryExpressionAsync(VBasic.Syntax.
8282 case VisualBasicEqualityComparison . RequiredType . StringOnly :
8383 if ( lhsTypeInfo . ConvertedType ? . SpecialType == SpecialType . System_String &&
8484 rhsTypeInfo . ConvertedType ? . SpecialType == SpecialType . System_String &&
85- _visualBasicEqualityComparison . TryConvertToNullOrEmptyCheck ( node , lhs , rhs , out CSharpSyntaxNode visitBinaryExpression ) ) {
85+ _visualBasicEqualityComparison . TryConvertToNullOrEmptyCheck ( node , lhs , rhs , lhsTypeInfo , rhsTypeInfo , out CSharpSyntaxNode visitBinaryExpression ) ) {
8686 return visitBinaryExpression ;
8787 }
88- ( lhs , rhs ) = _visualBasicEqualityComparison . AdjustForVbStringComparison ( node . Left , lhs , lhsTypeInfo , false , node . Right , rhs , rhsTypeInfo , false ) ;
89- omitConversion = true ; // Already handled within for the appropriate types (rhs can become int in comparison)
88+ if ( lhsTypeInfo . Type ? . SpecialType == SpecialType . System_Char && rhsTypeInfo . Type ? . SpecialType == SpecialType . System_Char ) {
89+ // Do nothing, char comparison
90+ } else if ( ( lhsTypeInfo . Type ? . SpecialType == SpecialType . System_Char && rhsTypeInfo . Type ? . SpecialType == SpecialType . System_String && _visualBasicEqualityComparison . IsNothingOrEmpty ( node . Right ) ) ||
91+ ( rhsTypeInfo . Type ? . SpecialType == SpecialType . System_Char && lhsTypeInfo . Type ? . SpecialType == SpecialType . System_String && _visualBasicEqualityComparison . IsNothingOrEmpty ( node . Left ) ) ) {
92+ if ( lhsTypeInfo . Type ? . SpecialType == SpecialType . System_Char ) {
93+ rhs = CS . SyntaxFactory . MemberAccessExpression ( CS . SyntaxKind . SimpleMemberAccessExpression , CS . SyntaxFactory . PredefinedType ( CS . SyntaxFactory . Token ( CS . SyntaxKind . CharKeyword ) ) , CS . SyntaxFactory . IdentifierName ( "MinValue" ) ) ;
94+ omitConversion = true ;
95+ } else {
96+ lhs = CS . SyntaxFactory . MemberAccessExpression ( CS . SyntaxKind . SimpleMemberAccessExpression , CS . SyntaxFactory . PredefinedType ( CS . SyntaxFactory . Token ( CS . SyntaxKind . CharKeyword ) ) , CS . SyntaxFactory . IdentifierName ( "MinValue" ) ) ;
97+ omitConversion = true ;
98+ }
99+ } else {
100+ ( lhs , rhs ) = _visualBasicEqualityComparison . AdjustForVbStringComparison ( node . Left , lhs , lhsTypeInfo , false , node . Right , rhs , rhsTypeInfo , false ) ;
101+ omitConversion = true ; // Already handled within for the appropriate types (rhs can become int in comparison)
102+ }
90103 break ;
91104 case VisualBasicEqualityComparison . RequiredType . Object :
92105 return _visualBasicEqualityComparison . GetFullExpressionForVbObjectComparison ( lhs , rhs , VisualBasicEqualityComparison . ComparisonKind . Equals , node . IsKind ( VBasic . SyntaxKind . NotEqualsExpression ) ) ;
0 commit comments