修改結構體清單中的元素
在C# 中,結構體是值類型,這表示每個實例都擁有自己的資料副本。此行為與類別不同,類別中的參考指向同一基礎物件。使用結構列表時,理解這些值類型語意非常重要。
考慮以下程式碼:
List<MyStruct> MyList = new List<MyStruct>(); MyList.Add(new MyStruct("john")); MyList.Add(new MyStruct("peter")); MyList[1].Name = "bob"; // Attempt to modify an element
此程式碼會觸發錯誤,指出 MyList 的回傳值[int] 無法修改,因為它不是變數。這個錯誤源自於值類型在賦值時被複製的事實。
Struct obItem = MyList[1]; // Creates a new instance of MyStruct obItem.Name = "Gishu"; // Modifies the new instance
這裡,obItem 是 MyStruct 的一個新實例,帶有 MyList[1] 中資料的副本。對 obItem 所做的任何變更都不會影響清單中的原始元素。
解:
如果需要修改結構體清單中的元素,請考慮以下內容選項:
這是一個使用介面的範例:
public interface IMyStructModifier { String Name { set; } } public struct MyStruct : IMyStructModifier ... List<Object> obList = new List<Object>(); obList.Add(new MyStruct("ABC")); obList.Add(new MyStruct("DEF")); IMyStructModifier temp2 = obList[1] as IMyStructModifier; temp2.Name = "Now Gishu"; foreach (MyStruct s in obList) // => "ABC", "Now Gishu" { Console.WriteLine(s.Name); }
結論:
雖然類別清單為修改元素提供了更大的靈活性,但當需要值語義時,結構會很有用。透過了解值類型的本質並探索替代解決方案,您可以有效地使用 C# 中的結構清單。
以上是如何修改 C# 結構清單中的元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!