后期分辨率;可能发生运行时错误,并且从Object到Inte Warning的1维数组的隐式转换

时间:2016-04-03 16:35:05

标签: vb.net

首先,我不想更改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)上,请提供任何帮助,而不是一个简单的解决方案,我想了解为什么会发生这种情况以及如何避免这种情况 先谢谢你。

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,它可以使您的代码在视觉上更加可视化(并优化范围/可见性)。