1. ホーム
  2. c#

[解決済み] 汎用クラスやメソッドのメンバからTの型を取得する方法

2022-03-23 01:37:23

質問

クラスやメソッドにジェネリックメンバーがあるとすると、以下のような感じです。

public class Foo<T>
{
    public List<T> Bar { get; set; }
    
    public void Baz()
    {
        // get type of T
    }   
}

クラスをインスタンス化すると TMyTypeObject1 というように、このクラスは一般的なリストプロパティを持ちます。 List<MyTypeObject1> . 非ジェネリッククラスにあるジェネリックメソッドについても同様です。

public class Foo
{
    public void Bar<T>()
    {
        var baz = new List<T>();
        
        // get type of T
    }
}

私のクラスのリストがどのような種類のオブジェクトを含んでいるかを知りたいのです。つまり、どのようなタイプの T というリストプロパティは Bar またはローカル変数 baz が含まれているか?

ができません。 Bar[0].GetType() というのも、リストには0個の要素が含まれる可能性があるからです。どうすればいいのでしょうか?

どのように解決するのですか?

私の理解が正しければ、あなたのリストはコンテナ・クラス自身と同じタイプ・パラメータを持っています。もしそうであれば

Type typeParameterType = typeof(T);

という幸運な状況にあるのなら object を型パラメータとして使用する場合は マルクの回答 .