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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-05 19:39:45531浏览

How Can I Modify Elements in a C# List of Structs?

修改结构体列表中的元素

在 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 所做的任何更改都不会影响列表中的原始元素。

解决方案:

如果需要修改结构体列表中的元素,请考虑以下内容选项:

  1. 使用类代替:类是引用类型,允许对底层对象的更改将传播到整个代码。
  2. 公开接口:结构可以实现接口,允许您通过接口引用修改实际结构。这种方法引入了拳击,应谨慎使用。

这是一个使用接口的示例:

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中文网其他相关文章!

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