ホームページ > バックエンド開発 > C++ > C# で複数のジェネリック型を 1 つのリストに保存するにはどうすればよいですか?

C# で複数のジェネリック型を 1 つのリストに保存するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-18 16:41:09
オリジナル
937 人が閲覧しました

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 リスト内の各項目は同じジェネリック型でなければならないため、異なる型のオブジェクトを追加することはできないことを意味します。

この制限を克服するための 1 つの方法は、次のように 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# で複数のジェネリック型を 1 つのリストに保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート