> 백엔드 개발 > C++ > C#의 단일 목록에 여러 일반 유형을 어떻게 저장할 수 있습니까?

C#의 단일 목록에 여러 일반 유형을 어떻게 저장할 수 있습니까?

Barbara Streisand
풀어 주다: 2025-01-18 16:41:09
원래의
938명이 탐색했습니다.

How Can I Store Multiple Generic Types in a Single List in C#?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿