«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу изменить отдельные элементы в списке структур в C#?

Как я могу изменить отдельные элементы в списке структур в C#?

Опубликовано в 2025-03-24
Просматривать:175

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

Изменение значения элемента в списке структур

В программировании манипулирование структурами данных является общей задачей. При работе со списками структур, конкретная проблема может возникнуть при попытке изменить значение отдельного элемента. В этой статье рассматривается основная причина этой проблемы и предоставляет потенциальное решение.

При работе с типами значений, такими как структуры, каждая переменная типа значения или ссылка представляет собой отдельный экземпляр структуры. Присвоение значения из элемента списка новой переменной, такой как struct obitem = mylist [1];, создает новый экземпляр с копируемыми членами. Любые изменения, сделанные в Obitem, не повлияют на исходный элемент в MyList.

это поведение связано с семантикой типов значений. При назначении типа значения новой переменной или передачи ее в качестве аргумента создается новый экземпляр, и значения копируются. Это в отличие от ссылочных типов, таких как классы, где изменения в ссылке будут влиять на исходный объект.

. Чтобы решить проблему изменения отдельных элементов в списке структур, один подход заключается в определении интерфейса, который реализует структура и использование этого интерфейса для доступа к структуре. Это позволяет изменить фактическую структуру через ссылку на интерфейс, который указывает на объект в штучной упаковке.

. { string name {set; } } Публичная структура Mystruct: imystructmodifier { public String name {get; набор; } } Список Oblist = New List (); Oblist.Add (Новая мистерк ("ABC")); Oblist.Add (новая мистерк ("def")); Mystruct temp = (mystruct) inbilt [1]; temp.name = "gishu"; Foreach (mystruct in inbilt) // "ABC", "def" { Console.WriteLine (S.Name); } Imystructmodifier temp2 = inbilt [1] как imystructmodifier; temp2.name = "Теперь gishu"; Foreach (mystruct in inbilt) // "ABC", "теперь Гишу" { Console.WriteLine (S.Name); }

public interface IMyStructModifier
{
    string Name { set; }
}

public struct MyStruct : IMyStructModifier
{
    public string Name { get; set; }
}

List obList = new List();
obList.Add(new MyStruct("ABC"));
obList.Add(new MyStruct("DEF"));

MyStruct temp = (MyStruct)obList[1];
temp.Name = "Gishu";

foreach (MyStruct s in obList) // "ABC", "DEF"
{
    Console.WriteLine(s.Name);
}

IMyStructModifier temp2 = obList[1] as IMyStructModifier;
temp2.Name = "Now Gishu";

foreach (MyStruct s in obList) // "ABC", "Now Gishu"
{
    Console.WriteLine(s.Name);
}

важно рассмотреть компромиссы использования структур по сравнению с классами для хранения в коллекциях. Страни предлагают преимущества производительности и предпочтительнее, когда требуется неизменность или небольшая площадь памяти. Однако, если изменение элементов в списке является требованием, то классы могут быть более подходящим вариантом.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3