问题:
尝试使用以下命令修改结构列表中的元素时数组索引运算符(例如,MyList[1].Name = "bob"),错误是遇到:“无法修改 'System.Collections.Generic.List.this[int]' 的返回值,因为它不是变量。”
解释:
此错误是由于结构的值类型语义而产生的。结构体按值复制,这意味着当从结构体列表访问元素时,将创建一个新实例并复制值。因此,修改这个新实例不会影响列表中的原始元素。
解决方案:
考虑使用类代替:
如果需要修改列表中的元素很重要,请考虑使用类而不是结构。类是引用类型,这意味着它们是通过引用而不是通过值传递的。修改类列表中的元素将直接影响原始实例。
公开接口:
如果需要结构体,一种解决方案是在结构。这允许通过指向装箱对象的接口引用进行修改。
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 temp = obList[1] as IMyStructModifier; temp.Name = "Now Gishu"; foreach (MyStruct s in obList) // => "ABC", "Now Gishu" { Console.WriteLine(s.Name); }
以上是如何在 C# 中修改结构列表中的元素?的详细内容。更多信息请关注PHP中文网其他相关文章!