Linq语句涉及基于索引的更新值不起作用

时间:2017-01-27 01:13:21

标签: linq

在我的C#winforms项目中,我想更新集合中的特定索引位置(此处名为List l1)。

我尝试了以下代码:

l1.Where((s,i1)=> i1 == intvalue).Select(s => {if(s> 0)s = -1; return s;};

我想在列表l1中将invalue index的值设置为-1,但是当我使用上面的语句执行此操作时,l1中的值不会更改。请帮忙!我是Linq的新手,并在一个集合中搜索了基于索引的价值变化'无处不在,但无法解决我的问题,因为它涉及BigInteger类型,我在列表中有很多元素,它们的总计数通过了c#中int类型的允许最大值。因此,当我输入l1 [intvalue]时,它表示不能将BigInteger转换为int作为索引位置。

由于

1 个答案:

答案 0 :(得分:0)

LINQ语言已整合查询。它的目的是查询数据。如果要修改列表项:

if (l1[intvalue] > 0)
    l1[intvalue] = -1;

此外,我想解释一下为什么您的查询没有更改列表。

在第一步,您将按某种条件选择列表项。顺便说一句非常奇怪的情况。如果要按索引选择项目,则有运算符ElementAt

然后你正在做投影。即你正在调用匿名方法,它接受每个选定的项目并产生一些结果。每个项目作为s参数传递给该方法。当您将-1分配给s时,实际上是为方法参数赋值。这不会影响列表中的项目。即使您的列表将包含引用类型而不是整数的项,为方法参数赋值也只会更改参数变量指向的位置。它不会更改原始列表中的引用。虽然您仍然可以修改引用类型的项目。但投影方法中的这种副作用并不是一种好的做法。