更改结构体列表中的值
使用结构体列表时,尝试修改元素时可能会遇到错误。此问题的出现是由于结构的值类型语义,它为每个值类型变量创建单独的实例。因此,当一个结构体元素被复制到另一个变量中时,它的修改不会影响原始元素。
解决这个困境的方法在于结构体可以公开接口。通过为所需属性创建一个带有设置访问器的接口,可以通过接口引用(指向装箱对象)修改底层结构。以下代码演示了这个概念:
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)); // Using a boxed object MyStruct temp = (MyStruct)obList[1]; temp.Name = "Gishu"; // Using the interface IMyStructModifier temp2 = obList[1] as IMyStructModifier; temp2.Name = "Now Gishu";
此方法允许修改结构列表中的元素,尽管它可能会导致装箱。因此,在考虑类型的设计时,集合存储和修改的需求不应覆盖类和结构之间适当的语义选择。
以上是如何在 C# 中修改结构列表中的值?的详细内容。更多信息请关注PHP中文网其他相关文章!