用于更改数组值的Linq表达式

时间:2016-01-06 09:23:40

标签: c# .net linq linq-to-sql lambda

我已使用默认值20初始化了一个大小为0xFF的数组,如下所示:

Byte[] tempArray = Enumerable.Repeat((Byte)0xFF, 20).ToArray();

现在我想将每个第四个位置的值更改为其他位置,例如0xA0

Linq表达的内容应该是什么?

4 个答案:

答案 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;