Как я могу изменить отдельные элементы в списке структур в C#?
Опубликовано в 2025-03-24
Просматривать:175
Изменение значения элемента в списке структур
В программировании манипулирование структурами данных является общей задачей. При работе со списками структур, конкретная проблема может возникнуть при попытке изменить значение отдельного элемента. В этой статье рассматривается основная причина этой проблемы и предоставляет потенциальное решение.
При работе с типами значений, такими как структуры, каждая переменная типа значения или ссылка представляет собой отдельный экземпляр структуры. Присвоение значения из элемента списка новой переменной, такой как struct obitem = mylist [1];, создает новый экземпляр с копируемыми членами. Любые изменения, сделанные в Obitem, не повлияют на исходный элемент в MyList.
это поведение связано с семантикой типов значений. При назначении типа значения новой переменной или передачи ее в качестве аргумента создается новый экземпляр, и значения копируются. Это в отличие от ссылочных типов, таких как классы, где изменения в ссылке будут влиять на исходный объект.
. Чтобы решить проблему изменения отдельных элементов в списке структур, один подход заключается в определении интерфейса, который реализует структура и использование этого интерфейса для доступа к структуре. Это позволяет изменить фактическую структуру через ссылку на интерфейс, который указывает на объект в штучной упаковке.
.
{
string name {set; }
}
Публичная структура Mystruct: imystructmodifier
{
public String name {get; набор; }
}
Список
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].
Мы сделаем это за вас как можно скорее.