2011-04-06 61 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