Vb.net ArgumentNullException未处理--帮助

Vb.net ArgumentNullException未处理--帮助,vb.net,Vb.net,这段代码在下面的指定行抛出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

这段代码在下面的指定行抛出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

ArgumentNullException-items参数中的项为null

也许你可以这样做

 For i As Integer = 0 To shaftlist.Count - 1
            shaftArray(i) = Iif(shaftlist(i).ShaftName=Nothing, String.Empty, shaftlist(i).ShaftName)
 Next
shaftArray(shaftList.Count)
为空。您的数组为0索引,最大索引
shaftlist.Count
。但你从未设置过max元素。您可能想要:

Dim shaftArray(shaftlist.Count - 1) As String
这是VB.NET的一个怪癖,数组声明声明声明数组中的最后一个有效索引,而不是数组中的元素数。因此,您的数组太大了一个元素。这将在AddRange()调用中爆炸,它会添加一个不存在的字符串。修正:

   Dim shaftArray(shaftlist.Count - 1) As String
或者完全使用Linq绕过显式数组:

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

@约翰,是的
Dim shaftArray(shaftlist.Count)作为字符串
等于
String[]shaftArray=新字符串[shaftlist.Count+1]@John,它在文件中,只是格式不好。@Matt:哦,对不起,太糟糕了,我没注意到。这对他有什么帮助?我们都可以用谷歌搜索这个方法。我不太确定你的业务逻辑(如果你的shaftlist(I).ShaftName应该包含空值),但我给了你一个检查的方法。我不能设置ShaftArray(shaftlist.count)=什么都不能,那么我怎么才能不将它设为空?@Matt,你不需要更改你的赋值。相反,你只需要一个更小的阵列。太棒了!我真的在想,自从Hallie在上面说我在数组中的一个项目可能是空的,但我不知道如何修复它。非常感谢!
    Dim shaftlist = DBShaft.GetShaftList()
    ShaftComboBox.Items.AddRange(shaftList.Cast(Of Object).ToArray())