Метод расширения ASP.NET (VB) не работает должным образом - PullRequest
2 голосов
/ 05 сентября 2010

У меня есть следующий метод расширения

Imports System.Runtime.CompilerServices
Namespace Extensions
    Public Module IntegerExtensions

        <Extension()>
        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

И в одном из моих классов я использую

user.Reputation.ToCommaDeliminatedNumber

Я импортирую пространство имен расширений в класс, но ошибкаЯ получаю ...

'ToCommaDeliminatedNumber' не является членом 'Integer?'.

Кто-нибудь может сказать мне, что мне здесь не хватает?У меня есть другие методы расширения для строк и дат, которые работают именно так, как и ожидалось ... Я просто в растерянности.

1 Ответ

1 голос
/ 05 сентября 2010

Судя по вашему сообщению об ошибке, похоже, что user.Reputation на самом деле Nullable(Of Integer), основанный на последнем вопросительном знаке ('Integer?').Это правильно?

Ваш метод расширения расширяет Integer, а не Integer? (то есть Nullable(Of Integer)), следовательно, ошибка.Так что либо предоставьте перегрузку, которая обрабатывает Integer?, либо вызовите Value для типа, допускающего значение NULL:

user.Reputation.Value.ToCommaDeliminatedNumber()

Вам нужно будет проверить, что он не равен нулю (Nothing), иначе будет выдано исключение,Перегруженный метод может выглядеть следующим образом:

<Extension()>
Public Function ToCommaDeliminatedNumber(ByVal int As Integer?) As String

    Return int.GetValueOrDefault().ToCommaDeliminatedNumber()

End Function

В случае нулевого значения по умолчанию будет отображаться значение 0.

...