gemeinsame Verarbeitung von Controls in einem Rutsch - welche eleganten Möglichkeiten gibt es? [gelöst]

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    gemeinsame Verarbeitung von Controls in einem Rutsch - welche eleganten Möglichkeiten gibt es? [gelöst]

    Hallo zusammen.

    Mein Gedächtnis ist und bleibt unzuverlässig, aber ich war mir sicher, dass in früheren VS-Versionen sowas ging:

    VB.NET-Quellcode

    1. Call {Button1, ListBox2, TextBox3}.ToList.ForEach(Sub(x) x.Visible = False)

    Inzwischen (?) wird rumgemeckert: Ein Elementtyp kann nicht abgeleitet werden …
    Für mich unverständlich, da alle vom Typ Control sind.

    Ich sehe zwei Möglichkeiten. Explizitdeklaration:

    VB.NET-Quellcode

    1. Dim Controls As Controls() = {Button1, ListBox2, TextBox3}
    2. Controls.ToList.ForEach(Sub(x) x.Visible = False)

    oder hinterrücks durch eine Function:

    VB.NET-Quellcode

    1. Public Function ArrayOf(ParamArray Controls As Control()) As Control()
    2. Return Controls
    3. End Function
    4. '[…]
    5. ArrayOf(Button1, ListBox2, TextBox3).ToList.ForEach(Sub(x) x.Visible = False)


    Geht das noch cleverer?

    btw: Ich versteh bis heute nicht, warum IEnumerable(Of T) keine ForEach-Extension hat. Von Haus aus muss man erstmal .ToList darauf anwenden, um zum ForEach zu kommen. Hab mir logischerweise selber ne entsprechende Extension gebaut, sodass es reicht zu schreiben:

    VB.NET-Quellcode

    1. ArrayOf(Button1, ListBox2, TextBox3).ForEach(Sub(x) x.Visible = False)

    Aber vielleicht arbeite ich auch so gegen das Framework. Wer weiß?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Gib doch einfach den gemeinsamen Datentypen kurz in deiner Arraydeklaration explizit an, wenn der (aus welchen Gründen auch immer nicht implizit abgeleitet werden kann. Also halt ​New Control() {Button1, ListBox2, TextBox3}....
    Ah, also effektiv

    VB.NET-Quellcode

    1. Call New Control() {Button1, ListBox2, TextBox3}.ForEach(Sub(x) x.Visible = False)
    Danke
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.