2010-09-05 25 views
2

我有以下的擴展方法ASP.NET(VB)擴展方法工作不正常

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

從你的錯誤信息看,它看起來像user.Reputation實際上是一個Nullable(Of Integer),基於尾隨問號('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 

如果它爲空,則將顯示默認值0。

+0

你是 - 謝謝你的第二雙眼睛。可空的整數正是問題所在。 – 2010-09-05 22:13:20

相關問題