1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

C# zu Visual Basic

Discussion in 'Programmieren' started by daniel0290, Apr 13, 2009.

Thread Status:
Not open for further replies.
  1. daniel0290

    daniel0290 Kbyte

    Hallo zusammen,

    ich habe ein Programm in C#, dass ich in Visual Basic umschrieben muss. Soweit sogut, außer einem kleinen Problem
    Code:
    treenode.Find(delegate(System.Windows.Forms.TreeNode m) { return h.host == m.Text; })
    diese Zeile krieg ich iwie nicht umgeschrieben.
    In der Referenz dazu für VB steht:
    treenode.Find(match as System.Predicate(Of System.Windows.Forms.Treenode))
    Mag sein, dass die Frage dumm ist, aber ich arbeite noch nict so lange mit VB und kenn mich mit der Syntax noch nicht so gut aus.
     
  2. AS_X

    AS_X Halbes Megabyte

    Hi Daniel,

    wahrscheinlich hast du mit dem anonymen Delegate Probleme:

    Code:
    delegate(System.Windows.Forms.TreeNode m) { return h.host == m.Text; }
    Der stellt prinzipiell nichts anderes als eine Methode dar (genauer gesagt: Invoke einer Delegate-Klasse). In deinem Fall hast du einen speziellen Delegate: Predicate; dessen Signatur ist

    Code:
    public delegate bool Predicate<T>(
        T obj
    )
    in VB.NET entsprechend:
    Code:
    Public Delegate Function Predicate(Of T) ( _
        obj As T _
    ) As Boolean
    Ein Predicate (Prädikat) ist also eine Funktion vom Typ T, die für ein gegebenes Objekt wahr oder falsch zurückgibt - genug Semantik.

    Was ist zu tun? Eine Funktion erstellen, die dem Delagte-Schema folgt und als Adresse dem Funktionsaufruf von Find übergeben:

    • Die Delegatenfunktion
      Code:
      Private Function FindFilter(ByVal m As TreeNode) As Boolean
        Return ... ' Vergleiche h.host mit m.Text
      End Function
    • Der Aufruf
      Code:
      treenode.Find(AdressOf FindFilter)

    Eleganter gehts wohl mit Lambda-Ausdrücken:

    Code:
    treenode.Find(Function(m) h.host == m.Text)
    (ohne Gewähr, könnte noch ein Problem mit dem Scope von h oder dem Typ von m geben (dann m As TreeNode))

    Naja, wahrscheinlich war's für dich eh zu spät...
    Trotzdem

    Grüße
    AS
     
    Last edited: Apr 18, 2009
  3. daniel0290

    daniel0290 Kbyte

    Danke erstmal f&#252;r die tolle Hilfe..........ich werd's bestimmt brauchen k&#246;nnen.
    Ich hab das problem &#252;berbr&#252;ckt, aber sehr unelegant. Werd das wohl noch verbessern.

    Gru&#223;
    daniel0290
     
Thread Status:
Not open for further replies.

Share This Page