首先,我不想更改Option Explicit的选项。
我一直试图根据这里的答案解决这些警告,有太多类似的问题,但没有答案确实有效,或者我无法理解。所以任何帮助将不胜感激。我的代码是
If bs(m.ToArray).Contains(spl) Then
Dim a As Array = fx(m.ToArray, spl)
RaiseEvent data(a(0))
m.Dispose
m = New MemoryStream
If a.Length = 2 Then
m.Write(a(1), 0, a(1).Length)
Thread.Sleep(1)
GoTo rr
End If
End If
并且fx函数是
Public Function fx(b As Byte(), spl As String) As Array
Dim l As New List(Of Byte())
Dim m As New MemoryStream
Dim mm As New MemoryStream
Dim s As String() = Split(bs(b), spl)
m.Write(b, 0, s(0).Length)
mm.Write(b, s(0).Length + spl.Length, b.Length - (s(0).Length + spl.Length))
l.Add(m.ToArray)
l.Add(mm.ToArray)
m.Dispose()
mm.Dispose()
Return l.ToArray
End Function
错误发生在a(0)
和a(1)
上,请提供任何帮助,而不是一个简单的解决方案,我想了解为什么会发生这种情况以及如何避免这种情况
先谢谢你。
答案 0 :(得分:0)
我做VB.NET已经有一段时间了,但我认为你的问题是关于使用Array。我非常肯定ToArray返回Byte(),而不是Array。
Array是所有特定.NET数组类型的基类,如int16,int32等。如果使用常见功能,例如检索数组边界或激活器/反射,则应该只使用Array。
Array类的代码示例: - https://msdn.microsoft.com/en-us/library/system.array(v=vs.110).aspx
正确使用数组: - https://msdn.microsoft.com/en-CA/library/wak0wfyt.aspx
关于内存流的附注,最好使用Using方法,否则未捕获的异常可能会导致内存泄漏。另一个好处是减少代码行,因为您不需要使用Dispose,它可以使您的代码在视觉上更加可视化(并优化范围/可见性)。