구조체 목록의 요소 값 변경
프로그래밍에서 데이터 구조를 조작하는 것은 일반적인 작업입니다. 구조체 목록을 처리할 때 개별 요소의 값을 변경하려고 하면 특정 문제가 발생할 수 있습니다. 이 문서에서는 이 문제의 근본적인 이유를 살펴보고 잠재적인 해결책을 제공합니다.
구조체와 같은 값 유형으로 작업할 때 각 값 유형 변수 또는 참조는 구조체의 고유한 인스턴스를 나타냅니다. 목록 요소의 값을 Struct obItem = MyList[1];과 같은 새 변수에 할당하면 멤버가 복사된 새 인스턴스가 생성됩니다. obItem에 대한 수정 사항은 MyList의 원래 요소에 영향을 주지 않습니다.
이 동작은 값 유형의 의미에서 비롯됩니다. 새 변수에 값 유형을 할당하거나 이를 인수로 전달하면 새 인스턴스가 생성되고 값이 복사됩니다. 이는 참조를 수정하면 원래 객체에 영향을 미치는 클래스와 같은 참조 유형과는 대조적입니다.
구조체 목록의 개별 요소를 수정하는 문제를 해결하기 위한 한 가지 접근 방식은 다음과 같은 인터페이스를 정의하는 것입니다. 구조체는 해당 인터페이스를 구현하고 사용하여 구조체에 액세스합니다. 이렇게 하면 박스형 개체를 가리키는 인터페이스 참조를 통해 실제 구조체를 수정할 수 있습니다.
다음 코드 조각은 이 기술을 보여줍니다.
public interface IMyStructModifier { string Name { set; } } public struct MyStruct : IMyStructModifier { public string Name { get; set; } } List<object> obList = new List<object>(); 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); }
이 방법을 사용하면 원본 구조체를 수정할 수 있습니다. 인터페이스 참조를 통해 목록에 저장합니다.
저장을 위해 구조체 사용과 클래스 사용의 장단점을 고려하는 것이 중요합니다. 컬렉션. 구조체는 성능상의 이점을 제공하며 불변성 또는 작은 메모리 공간이 필요할 때 선호됩니다. 그러나 목록의 요소를 수정해야 하는 경우에는 클래스가 더 적합한 옵션일 수 있습니다.
위 내용은 C#의 구조체 목록에 있는 개별 요소를 어떻게 수정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!