2011-04-06 59 views
0

此代碼在下面指定的行拋出ArgumentNullException,我不知道爲什麼。ArgumentNullException未處理 - 幫助

Private Sub ShaftLoad() 
     Dim newShaft As New Shaft 
     Dim shaftlist As New List(Of Shaft) 
     shaftlist = DBShaft.GetShaftList 
     Dim shaftArray(shaftlist.Count) As String 


     For i As Integer = 0 To shaftlist.Count - 1 
      shaftArray(i) = (shaftlist(i).ShaftName) 
     Next 

     ShaftComboBox.Items.AddRange(shaftArray) 'Exception is thrown here. 

End Sub 
+0

我認爲我做了第5行? – 2011-04-06 02:28:42

+0

@John,他的確如此。 'Dim shaftArray(shaftlist.Count)As String'等於'string [] shaftArray = new string [shaftlist.Count + 1];' – 2011-04-06 02:29:14

+0

@John,它在[initial version](http:// stackoverflow。 com/revisions/9a2a05ca-40b5-497a-b2f0-ab09a90278ec/view-source),格式不好。 – 2011-04-06 14:17:50

回答

1
Dim shaftArray(shaftlist.Count) As String 

這是VB.NET的怪癖,數組聲明狀態的最後一個有效的索引陣列中,而不是數組中元素的個數。因此你的數組太大了。這將在AddRange()調用中彈出,它添加一個Nothing的字符串。修復:

Dim shaftArray(shaftlist.Count - 1) As String 

或者繞過明確陣列完全使用LINQ:

Dim shaftlist = DBShaft.GetShaftList() 
    ShaftComboBox.Items.AddRange(shaftList.Cast(Of Object).ToArray()) 
+0

太棒了!我真的認爲,自從Hallie在上面說過,我的一個項目可能是空的,但我無法弄清楚如何解決這個問題。非常感謝! – 2011-04-06 02:45:59

0

根據MSDN

ArgumentNullException - 在項參數中的項目爲空。

也許你可以做這樣的事情..

For i As Integer = 0 To shaftlist.Count - 1 
      shaftArray(i) = Iif(shaftlist(i).ShaftName=Nothing, String.Empty, shaftlist(i).ShaftName) 
Next 
+0

好的,我該如何解決? – 2011-04-06 02:30:40

+0

這對他有什麼幫助?我們都可以通過Google的方法。 – 2011-04-06 02:30:48

+0

我並不確定您的業務邏輯(如果您的豎井列表(i).ShaftName應該包含空值),但是我給了您一個想知道要檢查的內容。 – hallie 2011-04-06 02:33:51

0

shaftArray(shaftList.Count)爲空。您的數組爲0索引,最大索引爲shaftlist.Count。但是你從來沒有設置最大的元素。你可能想:

Dim shaftArray(shaftlist.Count - 1) As String 
+0

我不能設置ShaftArray(shaftList.count)=沒有,所以我怎麼不讓它爲空呢? – 2011-04-06 02:33:02

+0

@Matt,你不需要改變你的作業。相反,你只需要一個更小的陣列。 – 2011-04-06 02:43:41