Exit Sub - Mehrere Booleans (evtl. LINQ wenn möglich)

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Exit Sub - Mehrere Booleans (evtl. LINQ wenn möglich)

    Hallo.

    Und zwar wenn ich mehrere Booleans habe, nehme ich in der Regel eine List(Of T) oder ein Booleanarray.

    z.B. so:


    VB.NET-Quellcode

    1. Dim K As Boolean() = {A > 3 , St.Length <= 3 , Z.Contains("L")}


    Und frage dann mit der entsprechenden Linq Extension ab, was ich brauche..

    z.B.

    VB.NET-Quellcode

    1. If K.Any(Function(d) Not d) then 'IrgendeinbooleanistnichtTrue


    oder

    VB.NET-Quellcode

    1. If K.All(Function(d) d) then 'Alle booleans sind true.



    Mein Problem:

    Jetzt habe ich aber das Problem, dass ich Funktionen habe (selbstgeschrieben) , die mir Booleans zurückgeben.

    Ich habe ungefähr 20 Bedingungen, die geprüft werden müssen (Validierung).

    Nach jeder Bedingung soll aber der gesamte Sub (mit Exit Sub) beendet werden, sofern False zurückgegeben wird.

    ich müsste ja jetzt

    VB.NET-Quellcode

    1. If not Bedingung1 then Exit Sub
    2. If not Bedingung2 then Exit Sub
    3. If not Bedingung3 then Exit Sub
    4. If not Bedingung4 then Exit Sub
    5. If not Bedingung5 then Exit Sub
    6. If not Bedingung6 then Exit Sub


    usw.


    Es soll immer nur Exit Sub ausgeführt werden, sodass der darunter stehende Code der Methode nicht mehr ausgeführt wird.

    Das mit einem Boolean() lösen geht ja nicht, da in dem
    Array ja zunächst alle Booleans gebildet werden -> Das soll ja nicht, denn sofern eine Bedingung False zurückgibt, soll keine weitere Funktion
    mehr aufgerufen werden.


    Ich könnte das ganze jetzt mit dem AND Operator und Unterstrichen (_ ) [für neue Zeilen] lösen, aber
    gibt es da noch eine schönere Lösung?

    VB.NET-Quellcode

    1. If Not Bedingung1 Then Exit Sub
    2. If Not Bedingung2 Then Exit Sub
    3. If Not Bedingung3 Then Exit Sub
    4. If Not Bedingung4 Then Exit Sub
    5. If Not Bedingung5 Then Exit Sub
    6. If Not Bedingung6 Then Exit Sub
    7. 'equals
    8. If Bedingung1 AndAlso Bedingung2 AndAlso Bedingung3 AndAlso Bedingung4 AndAlso Bedingung5 AndAlso Bedingung6 Then
    9. Else : Return
    10. End If
    Aber bei AndAlso wird ja die nachfolgende Bedingung auch geprüft , oder?

    Also wenn Bedingung 1 False ist, wird Bedingung2 ja auch geprüft. Da würde es ja dann zu einem
    Funktionsaufruf kommen für Bedingung2, das möchte ich ja eben nicht.

    Außerdem fragte ich ja, ob es eine andere Möglichkeit als die mit dem AND Operator gibt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Daniel Baumert“ ()

    @Daniel Baumert Try this:

    VB.NET-Quellcode

    1. <Flags>
    2. Public Enum MyEnum
    3. Bit1 = 1
    4. Bit2 = 2
    5. Bit3 = 4
    6. Bit4 = 8
    7. Bit5 = 16
    8. ' ...
    9. End Enum
    10. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    11. Dim value As MyEnum = CType(31, MyEnum)
    12. If value.HasFlag(MyEnum.Bit1) Then MessageBox.Show(MyEnum.Bit1.ToString)
    13. If value.HasFlag(MyEnum.Bit2) Then MessageBox.Show(MyEnum.Bit2.ToString)
    14. If value.HasFlag(MyEnum.Bit3) Then MessageBox.Show(MyEnum.Bit3.ToString)
    15. If value.HasFlag(MyEnum.Bit4) Then MessageBox.Show(MyEnum.Bit4.ToString)
    16. If value.HasFlag(MyEnum.Bit5) Then MessageBox.Show(MyEnum.Bit5.ToString)
    17. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!