用Linq搜索两个项目的组合

本文关键字:两个 项目 组合 Linq 搜索 | 更新日期: 2023-09-27 18:05:46

我之前使用了下面的代码来查找字符串中文本的第一次出现

int index = myString.IndexOf("AB");

现在我将更改软件,以便它将查找列表中两个字节的第一次出现。可以用Linq做吗?

编辑

程序的目的是通过串口进行通信。以前,程序使用字符串管理数据。但是在字符串中处理二进制数据是很奇怪的。因此,我更改了程序,以便在List<byte>中处理数据。

用Linq搜索两个项目的组合

Pure 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);
}

给定您想要在列表中搜索字节的方式,我假设您有一个名为listList<byte>对象和一个名为bytesbyte[]对象。

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