2012-03-14 67 views
0

我有我存儲在這裏的字節數組信息的字節數組變量:如何使用Contains(Of T)(T)方法?

internal List<Byte> portBuffer = new List<Byte>(); 

而且我還有一個字節數組變量:

byte[] ret_bytes = { 0x4F, 0x4B }; 

我如何找出是否ret_bytes是portBuffer裏面?下面的代碼似乎不正確。

portBuffer.Contains(ret_bytes) 

另一個問題,如何找出在側ret_bytes的portBuffer列表的第一個元素的位置,如果它是名單內?

感謝

+1

爲什麼你認爲這是不正確的? – mdm 2012-03-14 17:30:26

+0

你也想檢查訂單嗎? {0x4F,0x4B}!= {0x4B,0x4F} – SQLMason 2012-03-14 17:33:10

+0

因爲VS2010顯示errormsg:最好的重載方法「列表。包含」有一些無效的參數。我認爲這可能是我將字節[]傳遞給它的原因,它找不到任何匹配的重載函數。但在這裏如何解決它? – fiftyplus 2012-03-14 17:34:10

回答

1

Contains沒有找到內另一個序列,它找到一個序列中的一個元素 - 我不相信有.NET中任何事情會做你想要出了什麼框。

無論您是編寫一個非常通用的實施方案,還是隻編寫只需即可解決您當前的問題 - 前者可能需要更多工作,但從長遠來看可能會帶來收益。

如果你只需要找到兩個字節,我會誘惑,只是重複:

for (int i = 0; i < list.Count - 1; i++) 
{ 
    if (list[i] == 0x4f && list[i + 1] == 0x4b) 
    { 
     // Got it 
    } 
} 
+0

我可以寫我自己的檢查功能,但有什麼功能我可以直接使用?謝謝 – fiftyplus 2012-03-14 17:35:56

+0

@gpakillsme:不 - 就像我在我的awer中寫道的那樣:「我不相信.NET中有什麼可以做你想要的東西」 – 2012-03-14 17:36:38

0

使用LINQ - IEnumerable<T>.Intersect(IEnumerable<T>)得到的一組同時出現在portBufferret_bytes字節。

var portBuffer = new List<Byte> {0x4F, 0x4B, 0x27}; 
byte[] ret_bytes = { 0x4F, 0x4B, 0x26 }; 

return portBuffer.Intersect(ret_bytes); // This will return { 0x4F, 0x4B } 
相關問題