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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-05 19:39:45497검색

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

구조체 목록의 요소 수정

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에 대한 변경 사항은 목록의 원래 요소에 영향을 주지 않습니다.

해결책:

구조체 목록의 요소를 수정해야 하는 경우 다음을 고려하세요. 옵션:

  1. 대신 클래스 사용: 클래스는 참조 유형이므로 다음을 허용합니다. 기본 개체에 대한 변경 사항이 코드 전체에 전파됩니다.
  2. 인터페이스 노출: 구조체는 인터페이스를 구현할 수 있으므로 인터페이스 참조를 통해 실제 구조체를 수정할 수 있습니다. 이 접근 방식은 권투를 소개하므로 주의해서 사용해야 합니다.

다음은 인터페이스를 사용하는 예입니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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