ホームページ > バックエンド開発 > C++ > C# リストは、異なる型パラメーターを持つ複数のジェネリック型を保持できますか?

C# リストは、異なる型パラメーターを持つ複数のジェネリック型を保持できますか?

Barbara Streisand
リリース: 2025-01-18 16:32:13
オリジナル
438 人が閲覧しました

Can a C# List Hold Multiple Generic Types with Different Type Parameters?

複数のジェネリック型を含む C# リストの使用: 解決策

課題は、同じリスト内にさまざまな型パラメーターを持つ複数のジェネリック型を保持できる C# リストを作成することにあります。 値の型に制約された Metadata<T> クラスを考えてみましょう。目標は、Metadata<int>Metadata<bool>、および Metadata<double> オブジェクトを同時に保存できるリストを作成することです。

Metadata<T> は単一の具象型でなければならないため、T のリストを直接使用することはできません。 ただし、継承を使用したソリューションは実用的なアプローチを提供します。

継承を使用した解決策:

このアプローチでは、抽象基本クラス Metadata を導入し、そこから Metadata<T> のような特殊なクラスを派生させます。

<code class="language-csharp">public abstract class Metadata { }

public class Metadata<T> : Metadata where T : struct
{
    private T mDataType; 
    // ... other members ...
}</code>
ログイン後にコピー

これで、抽象基本クラス Metadata のリストを作成できます。

<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();</code>
ログイン後にコピー

このリストには、さまざまな Metadata<T> タイプのインスタンスを含めることができるようになりました:

<code class="language-csharp">metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
ログイン後にコピー

これは、継承による型固有の実装を可能にしながら、リストに共通の型 (Metadata) を提供することで問題をエレガントに解決します。 各オブジェクト内の特定の T にアクセスするには、適切な Metadata<T> 型にキャストバックする必要があります。 これは、C# でポリモーフィズムとジェネリック型を扱うときによくあるパターンです。

以上がC# リストは、異なる型パラメーターを持つ複数のジェネリック型を保持できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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