我希望使用LINQ来解决以下问题,我有如下集合:
这个例子中的数据遵循以下模式:
byteList[0] = 地址 (1, 2, 3, ... n)
byteList[1] = 旧状态,基本上代表一个枚举
byteList[2] = 新状态,与上面相同
我正在与一个嵌入式设备进行接口交互,这是我查看输入变化的方式。
为了清理代码并使其更易于维护程序员跟踪我的逻辑,我想将一些涉及的细节抽象出来,并将每个三字节数据集提取到匿名类型中,在函数内部使用它们进行一些额外处理。我已经写了一个快速实现,但我相信它可以大大简化。我试图清理代码,而不是让事情变得更加混乱!肯定有更简单的方法来执行以下操作:
List<byte> byteList = new List<byte() { 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x3, 0x4, 0x02 };
这个例子中的数据遵循以下模式:
byteList[0] = 地址 (1, 2, 3, ... n)
byteList[1] = 旧状态,基本上代表一个枚举
byteList[2] = 新状态,与上面相同
我正在与一个嵌入式设备进行接口交互,这是我查看输入变化的方式。
为了清理代码并使其更易于维护程序员跟踪我的逻辑,我想将一些涉及的细节抽象出来,并将每个三字节数据集提取到匿名类型中,在函数内部使用它们进行一些额外处理。我已经写了一个快速实现,但我相信它可以大大简化。我试图清理代码,而不是让事情变得更加混乱!肯定有更简单的方法来执行以下操作:
List<byte> byteList = new List<byte>()
{
0x01, 0x09, 0x01, 0x02, 0x08, 0x02, 0x03, 0x07, 0x03
};
var addresses = byteList
.Where((b, i) => i % 3 == 0)
.ToList();
var oldValues = byteList
.Where((b, i) => i % 3 == 1)
.ToList();
var newValues = byteList
.Where((b, i) => i % 3 == 2)
.ToList();
var completeObjects = addresses
.Select((address, index) => new
{
Address = address,
OldValue = oldValues[index],
NewValue = newValues[index]
})
.ToList();
foreach (var anonType in completeObjects)
{
Console.WriteLine("Address: {0}\nOld Value: {1}\nNew Value: {2}\n",
anonType.Address, anonType.OldValue, anonType.NewValue);
}
(i + 2) % 3 == 0
等价于i % 3 == 1
。 - phoog