2011-02-25 92 views
3
Public Property Duration() As Integer 
Get 
    Try 
    Return CType(Item(DurationColumn), Integer) 
    Catch e As Global.System.InvalidCastException 
    Throw New Global.System.Data.StrongTypingException("The value for column 'Duration' in table 'T_MembershipSale' is DBNull.", e) 
    End Try 
End Get 
Set(ByVal value As Integer) 
    Item(DurationColumn) = value 
End Set 
End Property 

當用戶想要分配""Item(DurationColumn)爲整數時會發生什麼?我得到一個異常。任何干淨的解決方案,以避免這種情況,並設置0""CType和類型拋出異常

謝謝

回答

3

使用Int32.TryParse

Dim number as Integer 
If Not Int32.TryParse(DurationColumn, number) Then number = 0 
return number 

此處理用戶可能輸入的「」的情況下,以及任何其他無效值(即非數字)。

+0

對我來說,這是乾淨的方式來做到這一點。 – XIVSolutions 2011-02-26 08:05:43

0

TryCastInt32.TryParse

0

您可以使用IsNumeric

number = If(IsNumeric(DurationColumn), CType(DurationColumn, Integer), 0) 
+0

這不起作用。根據http://msdn.microsoft.com/en-us/library/6cd3f6w1.aspx,「如果被檢查的字符串是一個包含逗號或美元符號的數字,IsNumeric也會返回True」。如果它是一個浮點數或一個大於整數的數字(即Long或ULong),它也會返回True。 – 2011-02-25 18:20:05

+0

@Jim Mischel,描述的問題是檢查「」,而不是溢出或其他東西。我明白你的觀點,但這段代碼確實有效 – Fredou 2011-02-25 18:55:13

0

你可以指定轉換前函數返回第一個變量然後檢查變量。

Dim sRet As String = Item(DurationColumn) 
    If Not String.IsNullOrEmpty(sRet) Then Convert.ToInt32(sRet)