Parameter Funktion

  • VB.NET

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

    Parameter Funktion

    Hallo,
    ich hab folgendes Problem, ich würde gerne mehrere Parameter mit "Or" an eine Funktion übergeben. Wie kann ich nun auslesen welche Befehle benutzt worden sind?
    Wenn ich Command Write (2) sende und Command Output (4) kommt 6 heraus, wird aber Command Write(2) und Command Output (3) wird 3 ausgegeben.

    VB.NET-Quellcode

    1. Sub Main()
    2. TEST(Commands.READ Or Commands.OUTPUT)
    3. End Sub
    4. Sub TEST(ByVal s As Commands)
    5. MsgBox(s)
    6. End Sub
    7. Public Enum Commands
    8. ''' <summary>
    9. ''' Read next Line
    10. ''' </summary>
    11. ''' <remarks></remarks>
    12. READ = 1
    13. ''' <summary>
    14. ''' Write a Line
    15. ''' </summary>
    16. ''' <remarks></remarks>
    17. WRITE = 2
    18. ''' <summary>
    19. ''' Send to Client
    20. ''' </summary>
    21. ''' <remarks></remarks>
    22. OUTPUT = 3
    23. End Enum
    24. End Class
    Hi
    dazu müssen die im Enum eingetragenen Werte Flags sein. D.h. Read Or Write sollte einen Wert ergeben, der dem eben entspricht. Da Read Or Write bei dir Output ergibt, kann das halt nicht mehr von den anderen unterschieden werden. I.A. vergleicht man mit Und, um ein Flag abzufragen.

    VB.NET-Quellcode

    1. Dim flags As CommandFlags = CommandFlags.Read Or CommandFlags.Write
    2. If (flags And CommandFlags.Read) = CommandFlags.Read Then
    3. 'Read-Flag gesetzt
    4. End If
    5. If (flags And CommandFlags.Write) = CommandFlags.Write Then
    6. 'Write-Flag gesetzt
    7. End If

    bspw. Außerdem wird ein Flags-Attribut auf das Enum gesetzt.

    Gruß
    ~blaze~
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. <Flags()> _
    2. Public Enum Commands
    3. Read = 1
    4. Write = 2
    5. ReadWrite = 3
    6. Output = 4
    7. End Enum
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. Dim fl As Commands = Commands.Read Or Commands.Write
    10. MessageBox.Show(fl.HasFlag(Commands.ReadWrite).ToString)
    11. 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!