当我重建解决方案时,我收到警告:
“变量'aMyArray'在分配值之前使用。”
VB.NET中的函数使用动态填充的数组。
示例:的
Function MyArray()
Try
Dim aMyArray()
For i = 0 to 100
ReDim Preserve aMyArray(i)
Next
Catch ex As Exception
End Try
End Function
如何声明动态填充的数组以消除此警告?
答案 0 :(得分:2)
一个。你的函数什么也没有返回,所以你也应该有关于那个
的警告 B中。你真的需要打开Option Strict
并让编译器指出其他错误,比如aMyArray没有Type。
℃。永远不要使用和清空Try/Catch
;如果有异常,您想要知道什么时候出错(以及在哪里),以便您可以解决它。
d。避免像瘟疫一样的阵列。 ReDim Preserve aMyArray(i)
创建一个新数组,然后将所有数据复制到新结构中。如果它是像字符串这样的大量数组,那么就性能而言可能是昂贵的。 Net有几个非常好的集合,例如List(of T)
,不需要显式调整大小:
Private myList As New List(of String) ' or Integer, Decimal or even MyClassObject
...
myList.Add("Hello")
myList.Add("Lists...")
myList.Add("Goodbye")
myList.Add("Arrays")
d(1)。使用List
的结果意味着可以完成整个过程。只需根据需要在列表中添加新内容即可。
电子。发布的代码实际上不会导致警告,因为您没有为其添加值。在循环 之后添加:aMyArray(2) = 2
会导致警告。这是因为您从未完全声明数组(大小和类型),如:
Dim aMyArray(100) As String
ReDim
只是调整数组的大小,这是不一样的。
F。由于新数组中没有任何内容,因此没有理由使用ReDim Preserve
,因为没有任何内容可以保留。我假设应该是一些计算。另一方面,如果 尝试调整现有数组的大小,则它应该是Sub。
我们都不得不猜测它是否真的要修改现有数组(基于ReDim Preserve
)或返回一个新的数组(考虑到数组是在过程中声明的)。
同样,使用List
,Dictionary
或其他集合类型不需要这样做。
答案 1 :(得分:1)
我喜欢使用CreateInstance来避免可能的错误:
Dim aMyArray() as string = Array.CreateInstance(GetType(String),0)