Select-Case-Verzweigung

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Select-Case-Verzweigung

    Hallo,
    habe bis dato noch nicht mit Select-Case gearbeitet. Meine Frage, kann man die nachstehenden IF-Abfragen in eine Select-Case-Verzweigung unterbringen. Mir fehlt der Ansatz.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Property Relevant_FuerJahresRechnung As Boolean
    2. Property Relevant_FuerJahresAbschluss As Boolean
    3. Property MietmonateimJahr As Integer
    4. Get
    5. If AktivesMietverhaeltnis = True Then ' Aktives Mietverhältnis mit dem Mieter, d.h. Mieter wohnt im Objekt
    6. If JahrEinzug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist im Buchungsjahr eingezogen
    7. If Not JahrAuszug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist nicht im Buchungsjahr ausgezogen
    8. Relevant_FuerJahresRechnung = True
    9. Relevant_FuerJahresAbschluss = True
    10. Return 13 - MonatEinzug
    11. Exit Property
    12. End If ' Mieter ist nicht im Buchungsjahr ausgezogen
    13. If JahrAuszug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist im Buchungsjahr ausgezogen
    14. Relevant_FuerJahresAbschluss = True
    15. Relevant_FuerJahresRechnung = False
    16. Return 13 - MonatAuszug - MonatEinzug
    17. Exit Property
    18. End If ' Mieter ist im Buchungsjahr ausgezogen
    19. End If ' Mieter ist im Buchungsjahr eingezogen
    20. If Not JahrEinzug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist nicht im Buchungsjahr eingezogen
    21. If Not JahrAuszug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist nicht im Buchungsjahr ausgezogen
    22. Relevant_FuerJahresAbschluss = True
    23. Relevant_FuerJahresRechnung = True
    24. Return 12
    25. Exit Property
    26. End If ' Mieter ist nicht im Buchungsjahr ausgezogen
    27. If JahrAuszug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist im Buchungsjahr ausgezogen
    28. Relevant_FuerJahresAbschluss = True
    29. Relevant_FuerJahresRechnung = False
    30. Return 13 - MonatAuszug
    31. Exit Property
    32. End If ' Mieter ist im Buchungsjahr ausgezogen
    33. End If ' Mieter ist nicht iim Buchungsjahr eingezogen
    34. End If ' Aktives Mietverhältnis mit dem Mieter
    35. If AktivesMietverhaeltnis = False Then ' Kein Aktives Mietverhältnis mit dem Mieter mehr, d.h. Mieter wohnt nicht mehr im Objekt
    36. If JahrEinzug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist im Buchungsjahr eingezogen
    37. If JahrAuszug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist im Buchungsjahr ausgezogen
    38. Relevant_FuerJahresAbschluss = True
    39. Relevant_FuerJahresRechnung = False
    40. Return 13 - MonatAuszug - MonatEinzug
    41. Exit Property
    42. End If ' Mieter ist im Buchungsjahr wieder ausgezogen
    43. End If ' Mieter ist im Buchungsjahr eingezogen
    44. If Not JahrEinzug = IB.Kontrol.Objektdaten.Buchungsjahr Then ' Mieter ist nicht im Buchungsjahr eingezogen
    45. Relevant_FuerJahresAbschluss = False
    46. Relevant_FuerJahresRechnung = False
    47. Return 0
    48. Exit Property
    49. End If ' Mieter ist nicht im Buchungsjahr eingezogen
    50. End If ' Kein Aktives Mietverhältnis mit dem Mieter
    51. End Get
    52. Private Set(value As Integer)
    53. End Set
    54. End Property


    Gruß Markus
    Macht bei einem Boolean-Test wenig Sinn.
    Du solltest dies nehmen:

    VB.NET-Quellcode

    1. If JahrAuszug = IB.Kontrol.Objektdaten.Buchungsjahr Then
    2. ' True-Fall
    3. Else
    4. ' False-Fall
    5. End If
    Bei einem solchen Konstrukt

    VB.NET-Quellcode

    1. If x = a Then
    2. Else If x = b Then
    3. Else If x = c Then
    4. Else
    5. End If
    ist ein Select Case sinnvoll:

    VB.NET-Quellcode

    1. Select Case x
    2. Case a
    3. Case b
    4. Case c
    5. Case Else
    6. End Select
    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!

    Westerwälder schrieb:

    es ist halt teilweise schwer den Überblick zu behalten
    Dafür haste dann in den unteren beiden Fällen die Zeilen Else bzw. Case Else, um z.B. Dir eine Mitteilung zukommen zu lassen, dass ein neuer Fall aufgetreten ist.
    Gugge Debug.Assert(...)
    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!

    Nixsager schrieb:

    wenn nur ein Wert abgefragt wird
    Dafür gibt es If.

    VB.NET-Quellcode

    1. If value = 15 Then
    2. MessageBox.Show("15")
    3. End If
    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!

    Nixsager schrieb:

    Mit Wert meinte ich Variabel oder so ähnlich.
    :?:
    Mach mal ein Beispiel.

    Nixsager schrieb:

    Das kann man auch in eine Zeile packen.;)
    Ja.

    VB.NET-Quellcode

    1. If value = 15 Then MessageBox.Show("15")
    Ist aber (editier-)fehleranfällig, wenn Du das ganze auf einen Mehrzeiler erweitern willst.
    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!
    @Nixsager:
    Kannst Du dafür ein Beispiel schreiben? Ich verstehe nicht, was Du meinst.

    VB.NET-Quellcode

    1. If VariableEinesWerteTyps1 = VariableEinesWerteTyps2 Then
    2. 'True-Teil
    3. Else
    4. 'False-Teil
    5. End If

    ist das selbe wie

    VB.NET-Quellcode

    1. Select Case VariableEinesWerteTyps1
    2. Case VariableEinesWerteTyps2
    3. 'True-Teil
    4. Case Else
    5. 'False-Teil
    6. End Select

    , aber man sollte das erste Verwenden.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils