修改结构体列表中的元素
在 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中文网其他相关文章!