2 Stimmen

Generische Klassen (T) - Angabe aus einer Reihe von Typen VB.Net

Dies ist der Code, den ich zu entwickeln versuche:

  Public Structure Statistic(Of t)
        Dim maxStat As t
        Dim curStat As t

        Public Sub New(ByVal pValue As t)
            maxStat = pValue
            curStat = pValue
        End Sub

        Public Property Level() As t
            Get
                Return curStat
            End Get
            Set(ByVal value As t)
                curStat = value
                If curStat > maxStat Then curStat = maxStat
            End Set
        End Property
    End Structure

Es wird nicht kompiliert, weil ich eine Fehlermeldung erhalte, dass '>' für die Typen T und T nicht definiert ist. Kann ich irgendwie Einschränkungen angeben, die garantieren, dass T ein numerischer Typ ist?

Das ist das, was ich derzeit nach Änderungen und Vorschlägen der Benutzer habe. Es funktioniert immer noch nicht. Muss ich die Werte von T ändern, damit alle von ihnen IComparable sind? Es muss etwas wirklich einfach sein, dass ich vermasseln.

   Public Structure Statistic(Of T As IComparable(Of T))
        Dim maxStat As T
        Dim curStat As T

        Public Sub New(ByVal pValue As T)
            maxStat = pValue
            curStat = pValue
        End Sub

        Public Property Statistic() As T
            Get
                Return curStat
            End Get
            Set(ByVal value As T)
                If value > maxStat Then

                End If
            End Set
        End Property
    End Structure

7voto

Matt Hamilton Punkte 193704

Man könnte T einschränken auf IComparable . Auf diese Weise wissen Sie, dass curStat und maxStat beide eine CompareTo-Methode haben, mit der Sie feststellen können, ob einer der beiden Werte größer ist als der andere.

4voto

mattmc3 Punkte 16673

Bitte sehr... das sollte funktionieren.

Public Structure Statistic(Of t As {IComparable})
   Dim maxStat As t
   Dim curStat As t

   Public Sub New(ByVal pValue As t)
      maxStat = pValue
      curStat = pValue
   End Sub

   Public Property Level() As t
      Get
            Return curStat
      End Get
      Set(ByVal value As t)
            curStat = value
            If curStat.CompareTo(maxStat) > 0 Then curStat = maxStat
      End Set
   End Property
End Structure

Außerdem erwähnten Sie die Beschränkung auf numerische Werte, aber ich glaube nicht, dass Sie sich nur auf diese beschränken können. Sie können jedoch nur auf primitive Typen (auf dem Stack) beschränken und keine Objekte (auf dem Heap) zulassen, indem Sie dies tun: Public Structure Statistic(Of t As {Structure, IComparable}) .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X