首页 >后端开发 >C++ >如何在 C# 中修改结构列表中的元素?

如何在 C# 中修改结构列表中的元素?

Barbara Streisand
Barbara Streisand原创
2025-01-01 04:49:10398浏览

How to Modify Elements in a List of Structs in C#?

修改结构列表中的元素

问题:

尝试使用以下命令修改结构列表中的元素时数组索引运算符(例如,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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn