VB -> C#: IEnumerable linq extension methods are replaced with static Enumerable methods

Aperta
#1,149 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
csharp
Ambito
tooling

Direzione di ricerca

Inizia con l'input VB.NET e confronta l'output C# generato, concentrandoti sulle catene LINQ seguite da Sum, Max, Count e Zip. Traccia il percorso di conversione per questi metodi di estensione; il lavoro è completato quando l'output preserva la sintassi delle chiamate di estensione e include tutti i parametri di tipo generico richiesti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Good for coding agent VB -> C#

IEnumerable.Select is replaced with Enumerable.Select if predicate is empty. Same happens to .Zip() and .OrderBy() but not to .Where().

It seems to be depended on the extension method used afterwards, while .Sum() and .Max() cause this bug, .Count() does not.

Tested with different numeric types, resulting in the same issue.

Also one generic type parameter is missing from the methods so it does not compile, e.g. .Select needs two but only has one or .Zip needs three but only has two.

VB.Net input code
    Public Class TestClass
        Public Shared Sub Test()
            Dim intCol = New Integer() {1, 2, 3}
            Dim intCol2 = New Integer() {1, 2, 3}

            Dim intColQuery = intCol.Select(Function(x) x)
            Dim intColCopy = intCol.Select(Function(x) x).ToArray()
            Dim intSum = intCol.Select(Function(x) x).Sum(Function(x) x)
            Dim intMax = intCol.Select(Function(x) x).Max(Function(x) x)
            Dim intCnt = intCol.Select(Function(x) x).Count(Function(x) x > 1)

            Dim intSum2 = intCol.Select(Function(x) x).Sum()
            Dim intMax2 = intCol.OrderBy(Function(x) x).Max()
            Dim intCnt2 = intCol.Select(Function(x) x).Count()
            Dim intSum3 = intCol.Zip(intCol2, Function(x, y) x + y).Sum()
        End Sub
    End Class
Erroneous output
public class TestClass
{
    public static void Test()
    {
        int[] intCol = new int[] { 1, 2, 3 };
        int[] intCol2 = new int[] { 1, 2, 3 };

        var intColQuery = intCol.Select(x => x);
        int[] intColCopy = intCol.Select(x => x).ToArray();
        int intSum = intCol.Select(x => x).Sum(x => x);
        int intMax = intCol.Select(x => x).Max(x => x);
        int intCnt = intCol.Select(x => x).Count(x => x > 1);

        var intSum2 = Enumerable.Select<int>((IEnumerable<int>)intCol, x => x).Sum();
        var intMax2 = Enumerable.OrderBy<int>((IEnumerable<int>)intCol, x => x).Max();
        int intCnt2 = intCol.Select(x => x).Count();
        var intSum3 = Enumerable.Zip<int, int>((IEnumerable<int>)intCol, (IEnumerable<int>)intCol2, (x, y) => x + y).Sum();
    }
}
Expected output
    public class TestClass
    {
        public static void Test()
        {
            int[] intCol = new int[] { 1, 2, 3 };
            int[] intCol2 = new int[] { 1, 2, 3 };

            var intColQuery = intCol.Select(x => x);
            int[] intColCopy = intCol.Select(x => x).ToArray();
            int intSum = intCol.Select(x => x).Sum(x => x);
            int intMax = intCol.Select(x => x).Max(x => x);
            int intCnt = intCol.Select(x => x).Count(x => x > 1);

            int intSum2 = intCol.Select(x => x).Sum();
            int intMax2 = intCol.OrderBy(x => x).Max();
            int intCnt2 = intCol.Select(x => x).Count();
            int intSum3 = intCol.Zip(intCol2, (x, y) => x + y).Sum();
        }
    }
Details
  • Product in use: VS extension
  • Version in use: 9.2.6.0
Lingua principale
C#
Stelle
913
Fork
244
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di icsharpcode/CodeConverter

Tutte le issue di icsharpcode/CodeConverter

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.