2016-04-03 33 views
0

首先,我不想更改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

您正在使用的mem流重載定義爲'Write(buffer()As Byte,offset As Integer,as As Integer count')。所以第一個參數是錯誤的(一個數組元素<>數組),而一個系統數組只能存放Object和Object Byte()。你有錯誤的數據類型。 (並且與Option Explicit沒什麼關係) – Plutonix

+0

@Plutonix好吧,我明白了,但是怎麼會是警告而不是錯誤呢?我可以投它來解決這些警告,或者我必須改變'fx'函數返回什麼? – tpo97969

+0

它*是一個錯誤,但您可能會將VS配置爲將其降級爲警告。不需要進行轉換,首先需要將其設置爲正確的類型:定義'fx'返回'Byte()' – Plutonix

回答

0

自從我做了VB.NET以來已經有一段時間了,但我認爲你的問題是關於使用Array。我相當肯定ToArray返回Byte(),而不是Array。

數組是所有特定.NET數組類型的基類,如int16,int32等。如果使用常用功能(如檢索數組邊界或激活器/反射),則應該只使用數組。

數組類代碼示例: - https://msdn.microsoft.com/en-us/library/system.array(v=vs.110).aspx

正確使用數組: - https://msdn.microsoft.com/en-CA/library/wak0wfyt.aspx

關於內存流

側面說明,這是最好使用Using方法,否則未捕獲的異常可能會導致內存泄漏。對於你來說另一件好事是減少你的代碼行數,因爲你不需要Dispose with Using,它使你的代碼在視覺上更好的結構化(並且優化了範圍/可見性)。

相關問題