Möglichkeit ohne TryCatch?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

    Möglichkeit ohne TryCatch?

    Abend,

    kurze Frage, ist Folgendes auch ohne einen TryCatch-Block möglich?

    VB.NET-Quellcode

    1. Sub CallMethod(ByVal methodName As String, ByVal args() As String)
    2. Dim method As MethodInfo = Me.GetType().GetMethod(methodName)
    3. Try
    4. method.Invoke(Me, args)
    5. Catch ex As Exception
    6. If TypeOf (ex) Is NullReferenceException Then
    7. Debug.Print("Ungültige Methode")
    8. ElseIf TypeOf (ex) Is TargetParameterCountException Then
    9. Debug.Print("Ungültige Parameteranzahl")
    10. Else
    11. Debug.Print("Andere Exception")
    12. End If
    13. End Try
    14. End Sub


    Und wenn ja, wie?
    Also NullReferenceException kann ich auch mit

    VB.NET-Quellcode

    1. If method IsNot Nothing Then...

    prüfen, aber was ist mit den anderen?
    Wenn was schief geht, dann ist was schiefgegangen. TryCatch löst nicht alles und bei NullReferencsExceptions ist das grundsätzlich immer ein Programmierfehler.
    Aber erklär mal, warum du sowas brauchst. Warum willst du Methoden per String aufrufen können? Könnte mir vorstellen, dass du Vererbung/Interfaces nicht kennst, könnte zumindest zu dem Vorhaben führen. Oder hast du dahingehend eine Grenze erreicht?
    (das hat was von Strict-Off-Proggen unter Strict-ON xD)

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

    FreakJNS schrieb:

    Warum willst du Methoden per String aufrufen können?

    Ich will sowas ähnliches wie die CMD bauen, bloß statt einer Konsolenanwendung, will ich es mit einer (Rich)TextBox machen (wieso, ist ja egal..). Und naja, ich will, dass man eine Methode aufrufen kann, indem man dessen Namen in die TextBox eintippt. Beispiel, man gibt "help" ein, dann wird die Sub help aufgerufen und dort wird jenachdem was erledigt, ausgegeben oder sonst was.

    P.S. ja ich weiß, ich könnte auch einfach die Benutzereingabe prüfen und dann (falls vorhanden) die Sub aufrufen, also so:

    VB.NET-Quellcode

    1. If eingabe = "help" Then
    2. help()
    3. ElseIf eingabe = "blubb" Then
    4. blubb()
    5. ...
    6. End If

    Jedoch wäre das am Ende viel zu unübersichtlich wegen den ganzen Parametern, oder wenn man in einem "Untermenü" ist (z.B. die telnet Funktion bei der CMD) usw.

    Wieso hat das was von Strict-Off-Proggen unter Strict-On..?

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

    Hier hast Du ne Möglichkeit ohne Try-Catch.

    VB.NET-Quellcode

    1. Imports System.Reflection
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Dim mI As MethodInfo = GetType(ListBox).GetMethod("BringToFront")
    5. Dim params() As String = {"Test", "Test1"}
    6. Dim pI() As ParameterInfo = Nothing
    7. If IsNothing(mI) Then Exit Sub
    8. pI = mI.GetParameters()
    9. If Not params.Length = pI.Count Then
    10. Exit Sub
    11. End If
    12. For i As Integer = 0 To pI.Count
    13. 'Hier prüfen, ob alle Parameter im Typ übereinstimmen.
    14. Next
    15. End Sub
    16. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Kraizy schrieb:

    Ich will sowas ähnliches wie die CMD bauen,

    Das verstehe ich mal so, dass man da beliebiges eingeben soll, und wenn er das iwie ausführen kann, sollers ausführen, anderenfalls soller nix anneres machen, als melden, dass nicht ausführbar.

    In meinen Augen ein Fall für TryCatch (ja - das gibts auch!), weil es ist ja beabsichtigt, dasses Prog nach einem sonen Fehler weiterläuft, und es ist auch dafür gesorgt, dasses dadurch nicht instabil wird.
    Ich würde da auch garnet die verschiedenen Exceptions aufdröseln, sondern die einfach genau melden, mit Angabe des Exception-Typs und der Message.
    Hat doch kein Sinn, sich für verschiedene Exceptions verschiedene Meldungen auszudenken, wo doch jede Exception eh verschieden ist, und auch verschiedene Messages raushaut.


    Obs einen Sinn hat, dem Benutzer ohne jede Benutzerführung da Freitext eingeben zu lassen, lassemermal dahingestellt sein.

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

    Kleine Anmerkung: Statt die Basisklasse Exception abzufangen und dann mit TypeOf zu unterscheiden, kann man auch nur bestimmte Exceptions fangen. Wie das geht, habe ich hier geschrieben:
    [VB 2012] Fehlermeldungen von System DirectoryServices abfangen bzw. ausgeben?
    Natürlich sollte man trotzdem nur die Exceptions mit Try/Catch fangen, die "unprüfbar" sind bzw. sich eine Prüfung nicht "lohnen" würde (zu viel overhead).
    Von meinem iPhone gesendet