Arrays VB.NET能否指定数组参数的大小?

Arrays VB.NET能否指定数组参数的大小?,arrays,vb.net,parameters,pass-by-reference,Arrays,Vb.net,Parameters,Pass By Reference,我想创建一个函数,它接受一个引用数组的参数,该数组至少有一定的长度,这样函数就知道有足够的空间来写入它需要写入数组的所有数据 这在VB.NET中是可能的吗 目前,我正在对引用的数组进行ReDim,但我不确定这是否真的有效。(我想我可以测试这个方法,并通过将数组传递给small来打破它,然后查看,我会立即尝试) 公共函数Foo(ByRef data()作为字节)作为布尔值 如果数据长度小于4,则 ReDim保留产品ID(4) 如果结束 '在阵列上放置4个字节的其他操作。。。 返回真值 端函数 即

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

这在VB.NET中是可能的吗

目前,我正在对引用的数组进行
ReDim
,但我不确定这是否真的有效。(我想我可以测试这个方法,并通过将数组传递给small来打破它,然后查看,我会立即尝试)

公共函数Foo(ByRef data()作为字节)作为布尔值
如果数据长度小于4,则
ReDim保留产品ID(4)
如果结束
'在阵列上放置4个字节的其他操作。。。
返回真值
端函数

即使这种方法有效,我也不认为重新调整用户数组的大小真的是一个好主意,而只是告诉他们参数指定的长度为4。。。有更好的管理方法吗?

没有,据我所知,您不能在参数列表中指定数组的大小


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

您的函数应该改为接收流

Public Function Foo(ByVal stream As Stream) As Boolean
    'Write bytes to stream
End Function
对于EAX示例,您可以使用
MemoryStream

Dim stream = new MemoryStream()
Foo(stream)
Dim array = stream.ToArray() 'Call ToArray to get an array from the stream.

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

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

 'Other operations...

  Return True
End Function

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

看起来可能函数“做得太多了”。它显然会查找/获取字节数组,但也会返回表示其他内容的bool。如果没有数据或其他故障,则返回空数组以表示故障或无可用数据。鉴于我们所知甚少,它的方式似乎过于雄心勃勃。你说得有道理,@puropoix。最好使用struct,然后让布尔函数接受struct。该函数与H/W设备交互,该设备在COM端口上返回不同的非固定长度的数据,其中部分或全部可能为零。布尔值表示通信是否失败或由于某种原因(例如COM尚未正确设置)而被取消,在这种情况下,数组仍将全部为零,但不是因为返回的数据为零,因此需要某种方法来辨别差异。@MichaelMcPherson很好的建议,我一直在回避它,因为我正在与之交互的H/W有大量的设置,我想为其编写“setter”函数,以便将它们视为属性。为每个不同的设置类型使用不同的结构会使类变得非常混乱。好吧,我不知道这是可能的(我通常用C编程,将字符串转换为布尔值几乎是可笑的:),我会尝试一下,我通常用C#或PHP,多态性是一个快照。我必须在VB.NET中查找如何执行此操作;)请抛出一个错误(正如Chris所建议的),而不是这样,这不会使您的代码对其他人(或您自己在6个月内)更具可读性,通常只是误用字符串返回类型一次做两件事(错误处理和返回值),您能详细说明一下吗?我以前从未使用过流,您能推荐一个阅读资源,以这种或类似的方式使用它们吗?在内存流的情况下,它只是一个自动增长的字节数组。
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))