C#ネストされたクラスの場合、ジェネリックメソッドの型パラメーターを分解する

アニー

たとえば、ネストされたクラスをジェネリックメソッドに渡して、そのすべてのクラスを評価しようとしています。

SharedClass.FindParentClass<GrandParent.Parent.Child>();

一般的な方法:

public void FindParentClass<T>() where T: ISomeInterface, new()
{
  //Break down T to all of its classes
}

私はこれを避けたい:

SharedClass.FindParentClass<GrandParent,GrandParent.Parent,GrandParent.Parent.Child>();

上記のコードで機能する汎用メソッド:

public void FindParent<TGrandParent, TParent, TChild>() where TGrandParent : IGrandParent, new()
                                                         where TParent : IParent, new()
                                                          where TChild : IChild, new()
{
 //all I have to do now is place the type parameters there where I want them    
}

型パラメーターとして使用されているクラスを変更することは許可されていないため、すべてのクラスは異なるインターフェースを継承し、パブリックパラメーターのないコンストラクターを持っています。

アニー

意図したとおりに機能させるには、3つの型パラメーターすべてを受け入れる別の(プライベート)ジェネリックメソッドを作成する必要がありました。

private void PerformWith<GrandParent, Grandparent.Parent, GrandParent.Parent.Child>()
{
         //Perform something
}

したがって、最初の一般的な方法では、リフレクションを使用して次のことを行います。

  1. すべての親タイプを決定します-GetTypeInfo()。ReflectedTypeを使用します
  2. 新しいメソッドを取得するには、それを汎用にして呼び出します。

これは次のようになります。

public void FindParentClass<T> where T: ISomeInterface, new()
{
   var parentClass = typeof(T).GetTypeInfo().ReflectedType;
   var grandparentClass = parentClass.GetTypeInfo().ReflectedType;

   var method = MethodBase.GetCurrentMethod().DeclaringType.GetMethod("PerformWith", BindingFlags.NonPublic());
   var genericMethod = method.MakeGenericMethod(new Type[] { grandparentClass, parentClass, typeof(T) });
   genericMethod.Invoke(null, null);
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C#の型パラメーターとしてジェネリッククラスにネストされたクラスを使用する

分類Dev

C#でジェネリックインターフェイスの基本型であると予想される場合、メソッドパラメータを渡す方法は?

分類Dev

ジェネリック型パラメーターを持つメソッドと非ジェネリックパラメーターを持つメソッドがある場合、Javaはどのオーバーロードされたメソッドを呼び出すかをどのように決定しますか?

分類Dev

C#ジェネリックスパラメーターとしてオブジェクト型を持たないジェネリックメソッドの引数として渡された型を取得するにはどうすればよいですか?

分類Dev

メソッドが型パラメーターをパラメーターとして除外している場合、ジェネリックスで「out」キーワードを使用することが禁止されているのはなぜですか?

分類Dev

ジェネリックメソッド内で型パラメーターが指定されているジェネリッククラスのイベントからサブスクライブを解除する

分類Dev

クラスジェネリック型パラメーターとメソッドジェネリック型パラメーターを区別する

分類Dev

型パラメーターが指定されていない場合、Javaジェネリックrawクラスがオブジェクトへのすべてのジェネリックを消去するのはなぜですか?

分類Dev

ジェネリック型パラメーターをC#の特定の型にキャストします

分類Dev

ジェネリック変数のパラメーター化された型クラスを取得します

分類Dev

特定のファクトリメソッドパラメータ値からクラスのジェネリック型を派生させる

分類Dev

指定された型の演算子のオーバーロードが存在する場合、C#コンパイラはジェネリックメソッドの参照の同等性をどのように判断しますか?

分類Dev

実行時型もジェネリック型である場合に、ジェネリック型とのインターフェイスを期待するメソッドへのラムダとしてメソッド参照を使用する場合のコンパイラエラー

分類Dev

Java-戻りの型が独自のメソッドパラメータ型にジェネリックを使用する場合の拡張インターフェースの戻りの型のオーバーライド

分類Dev

Javaのジェネリックメソッドの型パラメーターとして型パラメーターを持つクラスを渡す

分類Dev

ジェネリッククラスの呼び出されたメソッドと同じTを持つパラメーターとしてのC#ジェネリッククラス

分類Dev

C#でジェネリックスを使用する場合、子クラスのオーバーライドされたメソッドをどのように実行しますか?

分類Dev

ネストされたジェネリック型パラメーターパラメーター

分類Dev

メソッドのパラメーターとしてジェネリッククラスを使用する

分類Dev

ジェネリックメソッドのバインドされた型パラメーターは、同等のジェネリックインターフェイスが機能しているときに失敗します。なぜですか?

分類Dev

ジェネリックメソッドのバインドされた型パラメーターは、同等のジェネリックインターフェイスが機能しているときに失敗します。なぜですか?

分類Dev

パラメータ化されたメソッド内の可変スコープ-Javaジェネリック

分類Dev

2つのジェネリックを持つパラメーター化された型のクラスインスタンスを取得する方法

分類Dev

インターフェイスメソッドがC#のジェネリック型パラメーターを使用して別のメソッドの型を返すようにすることは可能ですか?

分類Dev

ジェネリックスを使用する場合の抽象メソッドのオーバーライド

分類Dev

複数のクラスでジェネリック/パラメーター化されたJavaを使用する

分類Dev

メインクラスのメソッドを使用して、ネストされたクラスからジェネリック型を返す方法

分類Dev

C#メソッドパラメータとしてジェネリッククラスを渡す

分類Dev

Java:クラス型パラメーターをジェネリックメソッドで指定されたジェネリック型と同じにする方法を教えてください。

Related 関連記事

  1. 1

    C#の型パラメーターとしてジェネリッククラスにネストされたクラスを使用する

  2. 2

    C#でジェネリックインターフェイスの基本型であると予想される場合、メソッドパラメータを渡す方法は?

  3. 3

    ジェネリック型パラメーターを持つメソッドと非ジェネリックパラメーターを持つメソッドがある場合、Javaはどのオーバーロードされたメソッドを呼び出すかをどのように決定しますか?

  4. 4

    C#ジェネリックスパラメーターとしてオブジェクト型を持たないジェネリックメソッドの引数として渡された型を取得するにはどうすればよいですか?

  5. 5

    メソッドが型パラメーターをパラメーターとして除外している場合、ジェネリックスで「out」キーワードを使用することが禁止されているのはなぜですか?

  6. 6

    ジェネリックメソッド内で型パラメーターが指定されているジェネリッククラスのイベントからサブスクライブを解除する

  7. 7

    クラスジェネリック型パラメーターとメソッドジェネリック型パラメーターを区別する

  8. 8

    型パラメーターが指定されていない場合、Javaジェネリックrawクラスがオブジェクトへのすべてのジェネリックを消去するのはなぜですか?

  9. 9

    ジェネリック型パラメーターをC#の特定の型にキャストします

  10. 10

    ジェネリック変数のパラメーター化された型クラスを取得します

  11. 11

    特定のファクトリメソッドパラメータ値からクラスのジェネリック型を派生させる

  12. 12

    指定された型の演算子のオーバーロードが存在する場合、C#コンパイラはジェネリックメソッドの参照の同等性をどのように判断しますか?

  13. 13

    実行時型もジェネリック型である場合に、ジェネリック型とのインターフェイスを期待するメソッドへのラムダとしてメソッド参照を使用する場合のコンパイラエラー

  14. 14

    Java-戻りの型が独自のメソッドパラメータ型にジェネリックを使用する場合の拡張インターフェースの戻りの型のオーバーライド

  15. 15

    Javaのジェネリックメソッドの型パラメーターとして型パラメーターを持つクラスを渡す

  16. 16

    ジェネリッククラスの呼び出されたメソッドと同じTを持つパラメーターとしてのC#ジェネリッククラス

  17. 17

    C#でジェネリックスを使用する場合、子クラスのオーバーライドされたメソッドをどのように実行しますか?

  18. 18

    ネストされたジェネリック型パラメーターパラメーター

  19. 19

    メソッドのパラメーターとしてジェネリッククラスを使用する

  20. 20

    ジェネリックメソッドのバインドされた型パラメーターは、同等のジェネリックインターフェイスが機能しているときに失敗します。なぜですか?

  21. 21

    ジェネリックメソッドのバインドされた型パラメーターは、同等のジェネリックインターフェイスが機能しているときに失敗します。なぜですか?

  22. 22

    パラメータ化されたメソッド内の可変スコープ-Javaジェネリック

  23. 23

    2つのジェネリックを持つパラメーター化された型のクラスインスタンスを取得する方法

  24. 24

    インターフェイスメソッドがC#のジェネリック型パラメーターを使用して別のメソッドの型を返すようにすることは可能ですか?

  25. 25

    ジェネリックスを使用する場合の抽象メソッドのオーバーライド

  26. 26

    複数のクラスでジェネリック/パラメーター化されたJavaを使用する

  27. 27

    メインクラスのメソッドを使用して、ネストされたクラスからジェネリック型を返す方法

  28. 28

    C#メソッドパラメータとしてジェネリッククラスを渡す

  29. 29

    Java:クラス型パラメーターをジェネリックメソッドで指定されたジェネリック型と同じにする方法を教えてください。

ホットタグ

アーカイブ