2017-05-11 1 views
0

ich es geschafft haben, für das Drucken auf Console.WriteLine Elemente aus zwei Listen von Doppel in eine Liste von Strings zu kombinieren:Mit Reißverschluss in vb.net zu einem Console.WriteLine aus zwei Listen Elemente in Paaren schicken

Dim list3 = list1.Zip(Of Double, String)(list2, Function(x, y) x.ToString + vbTab + y.ToString) 
For Each n In list3 
    Console.WriteLine(n) 
Next 

Die vorhergehenden Zeilen funktionieren gut. Ich fragte mich jedoch, ob ich diese in einer Operation kombinieren könnte. Ich habe den folgenden Code versucht, das kompilieren fehlschlägt:

list1.Zip(Of Double, Object)(list2, Sub(x, y) Console.WriteLine(x.ToString + vbTab + y.ToString)) 

Ich erhalte die Warnung, dass die verschachtelten Unter nicht über eine Signatur, die mit Delegierten Func (Of Double, Double, Object) "kompatibel ist. Wenn ich die erste Signatur von (von Double, Object) in (von Double, Double, Object) ändere, behebt dies den Fehler für die verschachtelte Sub, erzeugt dann aber einen neuen Fehler für list1.Zip. Ich vermisse wahrscheinlich etwas Offensichtliches, aber ich würde es begrüßen, wenn mich jemand zu einer Lösung führen könnte.

NB. Ich arbeite mit "Option Infer On"

Antwort

0

Es gibt mindestens eine und mit hoher Wahrscheinlichkeit weitere Bibliotheken von Drittanbietern, die eine Erweiterungsmethode ForEach bereitstellen, die Sie direkt auf einer aufzählbaren Liste aufrufen können. In Ermangelung einer von denen, die Sie verwenden können Array.ForEach:

Array.ForEach(list1.Zip(list2, 
         Function(x, y) x & vbTab & y). 
        ToArray(), 
       Sub(s) Console.WriteLine(s)) 

Beachten Sie, dass ich auch von Ihrem ursprünglichen Code vereinfacht:

list1.Zip(Of Double, String)(list2, Function(x, y) x.ToString + vbTab + y.ToString) 

zu:

list1.Zip(list2, Function(x, y) x & vbTab & y) 

besteht keine Notwendigkeit, um den generischen Typ der Methode Zip anzugeben, weil daraus abgeleitet werden kann. Außerdem sollten Sie IMMER den Verkettungsoperator & zum Verketten anstelle des Additionsoperators + verwenden. Dies bedeutet, dass es nicht erforderlich ist, ToString für Nummern aufzurufen, da die Verkettung ausschließlich unter Strings ausgeführt wird, sodass die Konvertierung in den Operator integriert ist. Genauer gesagt, der Operator ist so für den Typ String und die numerischen Typen definiert.

Verwandte Themen