VB -> C#: Nullable comparisons in While conditions produce invalid C#

Ouverte
#1,300 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 4 jours

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
68/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
csharp
Domaine
tooling

Piste de recherche

Start with the VB input and expected C# output in the issue, then trace how the converter handles While conditions and nullable comparisons. Add a regression test for the supplied case, including the parenthesized comparison variant. Done means the generated condition is a non-nullable bool and preserves VB's behavior when either value is Nothing.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

VB -> C#
VB.Net input code
Imports System

Class TestClass
    Sub TestMethod(startDate As Date?, endDate As Date?)
        Dim currentDate = startDate
        While currentDate <= endDate
            currentDate = currentDate.Value.AddMinutes(1)
        End While
    End Sub
End Class
Erroneous output

The converted while condition evaluates to bool? rather than bool, producing:

CS0266: Cannot implicitly convert type 'bool?' to 'bool'.
An explicit conversion exists (are you missing a cast?)
Expected output
using System;

internal partial class TestClass
{
    public void TestMethod(DateTime? startDate, DateTime? endDate)
    {
        var currentDate = startDate;
        while (currentDate.HasValue && endDate.HasValue && currentDate.Value <= endDate.Value)
            currentDate = currentDate.Value.AddMinutes(1d);
    }
}
Details
  • Product in use: VS extension, built locally from master.
  • Version in use: 10.0.1, local development build.
  • Did you see it working in a previous version, which? No.
  • VB permits nullable comparisons in While conditions. If the condition evaluates to Nothing, the loop body is not executed. C# requires a non-nullable bool condition.
  • The converter does not recognize While as a context requiring a non-nullable Boolean result, so it preserves the comparison's nullable result instead of treating Nothing as false.
  • The issue also occurs when the comparison is enclosed in parentheses: While (currentDate <= endDate).
Langage dominant
C#
Étoiles
917
Forks
243
Merge moyen
4 j 42 min
PR mergées (30 j)
11

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de icsharpcode/CodeConverter

Toutes les issues de icsharpcode/CodeConverter

Issues similaires

Plus d'issues C#

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.