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