在赋值之前使用数组变量

时间:2014-09-15 17:37:08

标签: arrays vb.net

当我重建解决方案时,我收到警告:

  

“变量'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 

如何声明动态填充的数组以消除此警告?

2 个答案:

答案 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)或返回一个新的数组(考虑到数组是在过程中声明的)。

同样,使用ListDictionary或其他集合类型不需要这样做。

答案 1 :(得分:1)

我喜欢使用CreateInstance来避免可能的错误:

Dim aMyArray() as string = Array.CreateInstance(GetType(String),0)