我已使用默认值20
初始化了一个大小为0xFF
的数组,如下所示:
Byte[] tempArray = Enumerable.Repeat((Byte)0xFF, 20).ToArray();
现在我想将每个第四个位置的值更改为其他位置,例如0xA0
。
Linq表达的内容应该是什么?
答案 0 :(得分:3)
您可以使用Enumerable.Range
,然后根据索引将索引投影到所需的值:
Byte[] tempArray = Enumerable
.Range(0, 20)
.Select(i => i%4 != 0 ? (Byte) 0xFF : (Byte) 0xA0)
.ToArray();
答案 1 :(得分:3)
LINQ用于访问数据,而不是用于修改数据。如果您从20 0xFF
的数组开始,则LINQ不适合对其进行更改。
但是,您可以使用LINQ构建基于旧数组的新数组:
var res = tempArray.Select((v, i) => i % 4 != 0 ? v : (Byte)0xA0).ToArray();
这会生成一个全新的数组,而不是更改tempArray
。您可以将res
复制到tempArray
,或者如果希望tempArray
更改,则可以进行分配。
答案 2 :(得分:1)
tempArray = tempArray.Select((b, i) => i % 4 == 0 ? (byte)0xA0 : b).ToArray();
答案 3 :(得分:1)
如果你真的想要创建一个具有交替值的新数组,那么你已经有了很好的工作答案。
但没有人展示修改现有数组的正常方法,即使用for循环:
for (int i = 0; i < tempArray.Length; i++)
if ((i + 1) % 4 == 0)
tempArray[i] = 0xA0;