2011-08-17 69 views
2

我以前使用以下代碼來查找字符串中第一次出現的文本。使用Linq搜索兩個項目的組合

int index = myString.IndexOf(「AB」);

現在我將更改軟件,以便它將查找列表中第一次出現的兩個字節。 Linq有可能嗎?

編輯

該程序的目的是通過串行端口進行通信。此前該程序使用字符串管理數據。但處理字符串中的二進制數據很奇怪。所以我改變了程序,以便在List<byte>中處理數據。

+2

可能,但你需要給我們提供了很多的信息。目前我們沒有太多的機會幫助你。請閱讀http://tinyurl.com/so-hints,然後更新您的問題。 –

回答

2

純LINQ:

var arr = new byte[] { 1, 2, 3, 4, 5, 6 }; 

var res = arr.Zip(arr.Skip(1), (a, b) => new { a, b }).Select((x, i) => new { x, i }) 
    .FirstOrDefault(v => v.x.a == 3 && v.x.b == 4); 


if (res != null) 
{ 
    Console.WriteLine(res.i); 
} 
1

給你怎麼說你想在一個列表來搜索字節,我假設你有List<byte>對象,命名爲list,和byte[],命名爲bytes

List<byte> list = new List<byte>(); 
byte[] bytes = { 0x01, 0x02 }; 

list.Where((b, i) => (list.Count() >= i + 1 ? false : (b == bytes[0] && list[i + 1] == bytes[1]))).First(); 

三元表達式,可以確保你沒有一個ArrayOutOfBoundsException