>백엔드 개발 >C++ >C#의 구조체 목록에 있는 개별 요소를 어떻게 수정합니까?

C#의 구조체 목록에 있는 개별 요소를 어떻게 수정합니까?

DDD
DDD원래의
2025-01-01 06:57:13480검색

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

구조체 목록의 요소 값 변경

프로그래밍에서 데이터 구조를 조작하는 것은 일반적인 작업입니다. 구조체 목록을 처리할 때 개별 요소의 값을 변경하려고 하면 특정 문제가 발생할 수 있습니다. 이 문서에서는 이 문제의 근본적인 이유를 살펴보고 잠재적인 해결책을 제공합니다.

구조체와 같은 값 유형으로 작업할 때 각 값 유형 변수 또는 참조는 구조체의 고유한 인스턴스를 나타냅니다. 목록 요소의 값을 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.