C 中list建立後無法再修改結構體元素的值

2021-10-08 16:03:30 字數 916 閱讀 1277

之前沒怎麼用過c#開發,由於工作原因開始學習c#。今天發現建立了乙個list集合(裡面的元素是結構體型別),後面再想給它修改和賦值就出現錯誤了。

**大致是這樣的:

//這裡定義了乙個學生結構體

public

struct stu

//建立乙個列表

list list =

newlist

<

stu>()

;//中間省略初始化過程

//然後我開始修改內容

foreach

(var u in list)

}

上面我一開始用的是迭代器去遍歷查詢,提示錯誤u只是乙個迭代器變數不能進行賦值。

後面採用for迴圈的方法,通過下標索引去選擇。

for

(int i =

0; i < list.count; i++

)}

出現錯誤提示,無法對list[i]進行修改,得知list[i]只是乙個拷貝值,不是乙個變數。

試了很多個方法,在不修改元素型別的情況下有乙個不是很方便的方法,就是建立乙個結構體變數,以結構體為單位進行賦值,具體**如下:

//建立結構體變數

stu stu;

//在for迴圈中進行修改賦值

for(

int i =

0; i < list.count; i++

)}

程式成功通過編譯。

由於此方法是以結構體為單位賦值,所以不管你是修改哪個成員,都要給結構體所有成員進行賦值,造成了很多不必要的操作。

List中的值型別無法修改的原因詳解

c sharp view plain copy public struct aa public class test 我們假設有這樣的乙個結構體。因為結構體是值型別的,在沒有修飾的情況下,我們的方法中,傳入,傳出都是傳遞的值,每次傳遞都進行了一次值的拷貝。所以,我們這樣操作是不可行的。datas 1...

List中的值型別無法修改的原因詳解

c sharp view plain copy public struct aa public class test 我們假設有這樣的乙個結構體。因為結構體是值型別的,在沒有修飾的情況下,我們的方法中,傳入,傳出都是傳遞的值,每次傳遞都進行了一次值的拷貝。所以,我們這樣操作是不可行的。datas 1...

List中的值型別無法修改的原因詳解

public struct aa public class test 我們假設有這樣的乙個結構體。因為結構體是值型別的,在沒有修飾的情況下,我們的方法中,傳入,傳出都是傳遞的值,每次傳遞都進行了一次值的拷貝。所以,我們這樣操作是不可行的。datas 1 value 10 為什麼呢,因為datas 1...