2017-01-27 28 views
0

在我的C#winforms項目中,我想更新集合(在此處命名爲List l1)中的特定索引位置。Linq語句涉及基於索引的更新值不工作

我嘗試下面的代碼:

l1.Where((S,I1)=> I1 ==的intValue)。選擇性(s => {如果(S> 0)S = -1;返回小號;};

我想在列表l1中設置值invalue index爲-1,但是當我這樣做時,上面的語句中l1中的值沒有改變請幫助!我是Linq的新手,並且擁有在任何地方搜索主題「基於索引的集合中的值更改」,但無法解決我的問題,因爲它涉及BigInteger類型,並且列表中有很多元素,以致它們的總計數在int中通過了int類型的最大值所以當我輸入l1 [intvalue]時,它說不能轉換Big整數索引位置的整數。

感謝

+0

LINQ用於查詢,而不是用於修改。 –

回答

0

LINQ是語言集成查詢。它的目的是查詢數據。如果要修改列表項:

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

另外,我想解釋一下爲什麼你的查詢不改變列表。

在第一步中,您將通過某些條件選擇列表項目。順便提一下非常奇怪的情況。如果要按索引選擇項目,則有運營商ElementAt

然後你在做投影。即你正在調用匿名方法來接受每個選定的項目併產生一些結果。作爲s參數傳遞給該方法的每個項目。當你將-1賦值爲s時,你實際上是給方法參數賦值。這不影響列表中的項目。即使您的列表將包含引用類型的項目而不是整數,但將方法參數賦值將僅改變參數變量指向的位置。它不會更改原始列表中的參考。儘管您仍然可以修改參考類型的項目。但是投影方法中的這些副作用並不是很好的做法。

+0

它說不能從BigInteger轉換爲int作爲索引intvalue,因爲'intvalue'是BigInteger。 – vinaych

+0

@vinaych爲什麼你在列表中使用BigInteger作爲索引?使用整數 –

+0

列表中的元素多於Int32.MaxValue,所以我需要訪問這些額外的元素? – vinaych