ASP.NET(VB)扩展方法无法按预期工作

时间:2010-09-05 19:04:22

标签: asp.net extension-methods asp.net-4.0

我有以下扩展方法

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 个答案:

答案 0 :(得分:1)

根据您的错误消息判断user.Reputation实际上是Nullable(Of Integer),基于尾随问号('整数?')。这是对的吗?

您的扩展方法正在扩展Integer,而不是Integer?(即Nullable(Of Integer)),因此错误。因此要么提供处理Integer?的重载,要么在可空类型上调用Value

user.Reputation.Value.ToCommaDeliminatedNumber()

您需要检查它是否为空(Nothing),否则将引发异常。重载方法可能如下所示:

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

    Return int.GetValueOrDefault().ToCommaDeliminatedNumber()

End Function

如果它为null,则会显示默认值0。