Hallo Community.
Ich hatte gerade das Problem, dass ich Elemente aus einem Array miteinander addieren wollte. Ich wollte dafür die von IEnumerable geerbte Funktion Sum verwenden. Jedoch musste ich feststellen, dass diese als Rückgabetypen nur die grundlegenden numerischen Datentypen zulässt, nicht jedoch den Typ T des IEnumerables. Da ich an der Stelle aber keine Schleife haben wollte hab ich mir dafür eine kleine Extension geschrieben, von der ich denke, dass sie vielleicht auch jemand anderem nützlich sein könnte. Hier der Code:
Die Funktion nimmt das erste Item der Auflistung und wendet dann den übergebenen Delegaten in Kombination mit dem nächsten Element darauf an usw.. Der erhaltene Wert wird in die Variable zurückgeschrieben, sodass sich die errechneten Werte summieren (wer hätte es gedacht). Der Additionsvorgang muss hierbei im Delegaten stattfinden, da die Funktion mit unbekannten Typen arbeitet (im Gegensatz zu den anderen Sum-Funktionen).
Eine Beispielanwendung mit einem selbst definierten Datentypen:
Edit:
Wie sich herausgestellt hat gab es diese Funktion bereits, sie heißt
Ich hatte gerade das Problem, dass ich Elemente aus einem Array miteinander addieren wollte. Ich wollte dafür die von IEnumerable geerbte Funktion Sum verwenden. Jedoch musste ich feststellen, dass diese als Rückgabetypen nur die grundlegenden numerischen Datentypen zulässt, nicht jedoch den Typ T des IEnumerables. Da ich an der Stelle aber keine Schleife haben wollte hab ich mir dafür eine kleine Extension geschrieben, von der ich denke, dass sie vielleicht auch jemand anderem nützlich sein könnte. Hier der Code:
Die Funktion nimmt das erste Item der Auflistung und wendet dann den übergebenen Delegaten in Kombination mit dem nächsten Element darauf an usw.. Der erhaltene Wert wird in die Variable zurückgeschrieben, sodass sich die errechneten Werte summieren (wer hätte es gedacht). Der Additionsvorgang muss hierbei im Delegaten stattfinden, da die Funktion mit unbekannten Typen arbeitet (im Gegensatz zu den anderen Sum-Funktionen).
Eine Beispielanwendung mit einem selbst definierten Datentypen:
VB.NET-Quellcode
- Public Class Form1
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim l As New List(Of TestStruct)({New TestStruct With {.TestValue = 10}, New TestStruct With {.TestValue = 5}})
- Debug.Print(l.Sum(AddressOf TestStruct.op_Addition).TestValue.ToString)
- End Sub
- End Class
- Public Structure TestStruct
- Public TestValue As Integer
- Public Shared Operator +(struct1 As TestStruct, struct2 As TestStruct) As TestStruct
- Return New TestStruct With {.TestValue = struct1.TestValue + struct2.TestValue}
- End Operator
- End Structure
Edit:
Wie sich herausgestellt hat gab es diese Funktion bereits, sie heißt
Aggregate
. Ich lass den Code dennoch mal hier drin, vielleicht kanns ja jemand in irgend ner Weise gebrauchen. Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Artentus“ ()