Feedback

VB - LINQ Erweiterung: SetList(Of T)

Veröffentlicht von am 1/6/2016
(1 Bewertungen)
Mir ist bis jetzt nicht bekannt, dass man eine Liste IEnumerable(Of T) direkt befüllen kann.
Es ist lediglich möglich eine leere Menge zu erzeugen mit Enumerable.Empty(Of T).

Mit einer Erweiterung SetList ist dies wir folgt möglich:

Dim stringValues = Enumerable.Empty(Of String).SetList("Eins", "Zwei", "Drei")
    <Runtime.CompilerServices.Extension>
    Function SetList(Of T)(obj As System.Linq.Enumerable, ParamArray Values() As T) As IEnumerable(Of T)

        Dim l As New List(Of T)
        For Each Value As T In Values
            l.Add(Value)
        Next
        Return l
    End Function

1 Kommentare zum Snippet

Koopakiller schrieb am 1/6/2016:
IEnumerable(Of T) gibt nur an, dass die jeweilige Klasse, die die Schnittstelle implementiert, einen Iterator zurück geben kann, welcher über die Elemente in der Klasse läuft. Das erfüllen u.A. alle Array-Klassen, von daher reicht auch folgender Code:
Dim stringValues As IEnumerable(Of String) = {"Eins", "Zwei", "Drei"}

Wobei du die explizite Deklaration des Typs auch weg lassen könntest, der Compiler erkennt dass ein String-Array dahinter steckt, welches IEnumerable(Of String) implementiert.

Außerdem finde ich es bei deinem Snippet etwas verwirrend, dass der 1. Parameter vollkommen ignoriert wird. So funktioniert sie zwar als Erweiterungsmethode, macht jedoch logisch wenig Sinn.
 

Logge dich ein, um hier zu kommentieren!