diff --git a/CHANGELOG.md b/CHANGELOG.md index 6316a8097..5a47b62e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) * Support CData [#1032](https://github.com/icsharpcode/CodeConverter/issues/1032) * Use verbatim strings for strings containing newlines * Fix clashing symbol renamer for Enum types [#1035](https://github.com/icsharpcode/CodeConverter/issues/1035) +* Convert nullable operators within a binary condition expression [#1038](https://github.com/icsharpcode/CodeConverter/issues/1038) ### C# -> VB diff --git a/CodeConverter/CSharp/VbSyntaxNodeExtensions.cs b/CodeConverter/CSharp/VbSyntaxNodeExtensions.cs index 17ef86e6d..a5017f5e9 100644 --- a/CodeConverter/CSharp/VbSyntaxNodeExtensions.cs +++ b/CodeConverter/CSharp/VbSyntaxNodeExtensions.cs @@ -28,7 +28,6 @@ public static bool AlwaysHasBooleanTypeInCSharp(this VBSyntax.ExpressionSyntax v parent is VBSyntax.IfStatementSyntax ifStatement && ifStatement.Condition == vbNode || parent is VBSyntax.ElseIfStatementSyntax elseIfStatement && elseIfStatement.Condition == vbNode || parent is VBSyntax.TernaryConditionalExpressionSyntax ternary && ternary.Condition == vbNode || - parent is VBSyntax.BinaryConditionalExpressionSyntax binary && binary.FirstExpression == vbNode || parent is VBSyntax.WhereClauseSyntax; } } \ No newline at end of file diff --git a/Tests/CSharp/TypeCastTests.cs b/Tests/CSharp/TypeCastTests.cs index 0a0ad11d1..fd19ce16c 100644 --- a/Tests/CSharp/TypeCastTests.cs +++ b/Tests/CSharp/TypeCastTests.cs @@ -869,6 +869,25 @@ private void Test() }"); } + [Fact] + public async Task RetainNullableBoolWhenNeededAsync() + { + await TestConversionVisualBasicToCSharpAsync( + @"Class Class1 + Function F(a As Net.IPAddress) As Boolean + Return If(a?.ScopeId = 0, True) +End Function +End Class", + @" +internal partial class Class1 +{ + public bool F(System.Net.IPAddress a) + { + return ((a?.ScopeId) is { } arg1 ? arg1 == 0 : (bool?)null) ?? true; + } +}"); + } + [Fact] public async Task TestNullableBoolConversionsAsync() {