我有以下扩展方法
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?'的成员。
有人能告诉我这里可能缺少什么吗?我确实有其他的字符串和日期扩展方法完全按照预期工作......我只是在这一点上茫然。
答案 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。