2 Stimmen

ASP.NET (VB) Erweiterungsmethode funktioniert nicht wie erwartet

Ich habe die folgende Erweiterungsmethode

Imports System.Runtime.CompilerServices
Namespace Extensions
    Public Module IntegerExtensions

        Public Function ToCommaDeliminatedNumber(ByVal int As Integer) As String

            Dim _input As String = int.ToString
            Select Case int
                Case Is > 99999 : Return _input.Remove(_input.Length - 3) & "k"
                Case Is > 9999 : Return Math.Round(Double.Parse(int / 1000), 1).ToString & "k"
                Case Is > 999 : Return String.Format("{0:N0}", int)
                Case Else : Return _input
            End Select

        End Function
    End Module
End Namespace

Und in einer meiner Klassen benutze ich

user.Reputation.ToCommaDeliminatedNumber

Ich importiere den Extensions-Namespace in die Klasse, aber der Fehler, den ich erhalte, ist...

'ToCommaDeliminatedNumber' ist kein Member von 'Integer?'.

Kann mir jemand sagen, was ich hier möglicherweise übersehe? Ich habe auch andere Erweiterungsmethoden für Zeichenfolgen und Datumswerte, die genau wie erwartet funktionieren... Hier bin ich einfach ratlos.

1voto

Ahmad Mageed Punkte 91261

Ausgehend von Ihrer Fehlermeldung sieht es so aus, als ob user.Reputation tatsächlich ein Nullable(Of Integer) ist, basierend auf dem hinteren Fragezeichen ('Integer?'). Ist das korrekt?

Ihr Erweiterungsmethode erweitert Integer, nicht Integer? (d.h. Nullable(Of Integer)), daher der Fehler. Entweder stellen Sie eine Überladung bereit, die Integer? behandelt, oder rufen Sie Value auf den Null-Typ auf:

user.Reputation.Value.ToCommaDeliminatedNumber()

Sie müssen überprüfen, dass es nicht null (Nothing) ist, da sonst eine Ausnahme ausgelöst wird. Eine überladene Methode könnte so aussehen:

Public Function ToCommaDeliminatedNumber(ByVal int As Integer?) As String

    Return int.GetValueOrDefault().ToCommaDeliminatedNumber()

End Function

Im Falle von null würde der Standardwert von 0 angezeigt werden.

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