2010-10-27 53 views
0

我有這樣的方法:在VB.NET法「一無所有」準備

Private Sub SetIfNotNull(ByVal input As Object, ByRef destination As Object, ByVal ConversionType As ConversionType) 
     If input IsNot Nothing AndAlso input <> "" Then 
      Select Case ConversionType 
       Case DealerTrackConnection.ConversionType._String 
        destination = input 
       Case DealerTrackConnection.ConversionType._Integer 
        destination = Convert.ToInt32(input) 
       Case DealerTrackConnection.ConversionType._Double 
        destination = Convert.ToDouble(input) 
       Case DealerTrackConnection.ConversionType._Date 
        destination = Convert.ToDateTime(input) 
       Case DealerTrackConnection.ConversionType._Decimal 
        destination = Convert.ToDecimal(input) 
      End Select 
     End If 
    End Sub 

這裏是一個呼叫中失敗:

SetIfNotNull(ApplicantElement.Element("suffix").Value, NewApplicant.Suffix, ConversionType._String) 

如果從XML文件中的元素是沒有(沒有標籤),方法調用失敗。但我沒有檢查什麼。爲什麼要這樣做,以及如何修改代碼以在這個時間和每次都修復它。

回答

2

的問題是不是在你的SetIfNotNull方法,而正是在這一段代碼:ApplicantElement.Element("suffix").Value

元素是空的,所以Value調用拋出一個NullReferenceException。試試這個:

CType(ApplicantElement.Element("suffix"), String) 

此外,您還可以鞏固檢查這一行:

If input IsNot Nothing AndAlso input <> "" Then 

到這一點:

If Not String.IsNullOrEmpty(input) Then 
+0

+1這些檢查可以進一步合併。在VB.Net中,'String.IsNullOrEmpty(input)'等價於'(input =「」)',因爲VB.Net在使用'='進行字符串比較時將''''看作''「''。 [見這裏](http://stackoverflow.com/questions/2633166/nothing-string-empty-why-are-these-equal/2633274#2633274) – MarkJ 2010-10-28 08:27:39

+0

@MarkJ謝謝,我沒有意識到這一點:) – 2010-10-28 15:38:51

0

似乎ApplicantElement.Element( 「後綴」)什麼也沒有,因此在你的方法被調用之前發生異常,不是嗎?

If Not ApplicantElement.Element("suffix") Is Nothing Then 
    SetIfNotNull(ApplicantElement.Element("suffix").Value, NewApplicant.Suffix, ConversionType._String) 
End If