VB -> C#: Base constructor calls with noncanonical casing produce invalid C#

Offen Anfängerfreundlich
#1,301 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 3 Tagen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
72/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
csharp
Bereich
tooling

Rechercherichtung

Beginne damit, die Erkennung von VB.NET-Basiskonstruktorinitialisierern im Konverter zu finden; laut Issue beruht sie derzeit auf einem Vergleich von Text unter Beachtung der Groß- und Kleinschreibung. Füge Regressionstests für MyBase.new(value) mit gemischter Groß- und Kleinschreibung sowie für die parameterlose Form MyBase.new hinzu. Als erledigt gilt die Aufgabe, wenn beide einen C#-Konstruktorinitialisierer statt eines base.ctor-Aufrufs erzeugen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

VB -> C#
VB.Net input code
Public Class DataSet1
    Inherits Global.System.Data.DataSet

    Public Sub New(value As String)
        MyBase.new(value)
    End Sub
End Class
Erroneous output

The base constructor call is emitted as a method call inside the constructor body:

public partial class DataSet1 : System.Data.DataSet
{
    public DataSet1(string value)
    {
        base.ctor(value);
    }
}

This produces compiler error CS0117 because DataSet does not contain a definition for ctor.

Expected output
public partial class DataSet1 : System.Data.DataSet
{
    public DataSet1(string value) : base(value)
    {
    }
}
Details
  • Product: Visual Studio extension, built locally from master.
  • Version: 10.0.1 (local development build).
  • Previous working version: No.

VB.NET is case-insensitive, so MyBase.New(value), MyBase.new(value), and MyBase.nEw(value) are equivalent. However, the converter uses a case-sensitive text comparison when recognizing the constructor initializer.

The same issue occurs with parameterless calls written without parentheses, such as MyBase.new.

A workaround is to use the canonical casing, MyBase.New.

Vorherrschende Sprache
C#
Sterne
917
Forks
243
Ø Merge
2 T. 15 Std.
Gemergte PRs (30 T.)
9

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus icsharpcode/CodeConverter

Alle Issues in icsharpcode/CodeConverter

Ähnliche Issues

Weitere Issues zu C#

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.