VB.NET可以指定数组参数的大小吗?

时间:2015-07-24 14:02:33

标签: arrays vb.net parameters pass-by-reference

我想创建一个函数,该函数接受对至少一定长度的数组的引用的参数,以便函数知道有足够的空间来写入它需要写入的所有数据。阵列。

这在VB.NET中是否可行?

目前我ReDim正在引用数组,但我不确定这是否真的有效。 (我想我可以测试这个方法并通过将数组传递给小而打破它,看看,会暂时尝试)

Public Function Foo(ByRef data() As Byte) As Boolean
    If Data.Length < 4 Then
        ReDim Preserve ProductId(4)
    End If
    ' Other operations that put 4 bytes on the array...
    Return True
End Function

即使该方法有效,我也不相信重新调整用户数组的大小确实是一个很好的想法,只是告诉他们参数指定的长度为4 ...有没有更好的管理这个的方式?

3 个答案:

答案 0 :(得分:3)

您的功能应该改为使用流。

Public Function Foo(ByVal stream As Stream) As Boolean
    'Write bytes to stream
End Function

对于eaxmple,您可以使用MemoryStream

调用您的方法
Dim stream = new MemoryStream()
Foo(stream)
Dim array = stream.ToArray() 'Call ToArray to get an array from the stream.

答案 1 :(得分:2)

据我所知,你不能在参数列表中指定数组的大小。

但是,您可以像查看当前正在执行的操作一样检查数组的大小,然后抛出ArgumentException。这似乎是在方法开始时验证数据的最常用方法之一。

答案 2 :(得分:1)

我实际上尝试的类似于你在这里做的事情,但是像这样:

Public Function Foo(ByRef data() As Byte) As Boolean
 If Data.Length < 4 Then
    Return False
 End If

 'Other operations...

  Return True
End Function

或许这个:

Public Function Foo(ByRef data() As Byte) As String
 If Data.Length < 4 Then
    Return "This function requires an array size of four"
 End If

 'Other operations...

  Return "True"
End Function

然后,在你的调用函数中,这个:

Dim d As Boolean = Convert.ToBoolean(Foo(YourArray))

然后你可以将错误冒充给用户,这就是你想要做的,对吗?