C#의 목록은 여러 일반 유형을 저장합니다
C#의 일반 유형은 다양한 데이터 유형에서 작동할 수 있는 클래스와 메서드를 생성하기 위한 강력한 메커니즘을 제공합니다. 그러나 목록에서 여러 일반 유형을 사용하려고 할 때 일반적인 문제가 자주 발생합니다.
다음 예를 고려해 보세요.
<code class="language-csharp">public class Metadata<DataType> where DataType : struct { private DataType mDataType; } List<Metadata<DataType>> metadataObjects; //错误: DataType 未定义 metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
여기서 목표는 다양한 데이터 유형의 메타데이터 개체가 포함된 목록을 만드는 것입니다. 그러나 Metadata<DataType>
클래스의 where
제약 조건은 일반 유형 DataType
을 값 유형으로 제한합니다. 이는 metadataObjects
목록의 각 항목이 동일한 일반 유형이어야 하므로 다른 유형의 객체를 추가할 수 없음을 의미합니다.
이러한 한계를 극복하기 위한 한 가지 방법은 다음과 같이 Metadata
에 대한 추상 기본 클래스를 도입하는 것입니다.
<code class="language-csharp">public abstract class Metadata { } // 继承抽象 Metadata 类 public class Metadata<DataType> : Metadata where DataType : struct { private DataType mDataType; }</code>
를 생성하면 일반 클래스 Metadata
가 이제 이 기본 클래스를 확장할 수 있습니다. 이를 통해 각 항목이 서로 다른 일반 유형이 될 수 있는 Metadata<DataType>
객체 목록을 가질 수 있습니다. Metadata
<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>(); metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
목록은 다양한 값 유형의 개체를 보유할 수 있으므로 목록에 여러 일반 유형이 있다는 목표를 효과적으로 달성할 수 있습니다. metadataObjects
기본 클래스는 특정 mDataType
을 알지 못하기 때문에 Metadata
속성에 액세스할 때 유형 변환이 필요하다는 점에 유의해야 합니다. DataType
위 내용은 C#의 단일 목록에 여러 일반 유형을 어떻게 저장할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!