구조체 목록의 요소 수정
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은 MyList[1]의 데이터 복사본이 포함된 MyStruct의 새 인스턴스입니다. obItem에 대한 변경 사항은 목록의 원래 요소에 영향을 주지 않습니다.
해결책:
구조체 목록의 요소를 수정해야 하는 경우 다음을 고려하세요. 옵션:
다음은 인터페이스를 사용하는 예입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!