8

私は持っています:

public class MyUserControl : WebUserControlBase <MyDocumentType>{...}

MyDocumentType別のクラスにいる場合のTypeNameを取得するにはどうすればよいですか?

4

4 に答える 4

7

次のようなものを使用できます。

typeof(MyUserControl).BaseType.GetGenericArguments()[0]
于 2013-03-20T09:43:44.367 に答える
3

クラスがから直接派生していることがわかっTている場合に、タイプを取得する方法を示す回答はたくさんあります。:に遭遇するまで階層を上に移動できるようにしたい場合は、次の方法で行います。WebUserControlBase<T>WebUserControlBase<T>

var t = typeof(MyUserControl);
while (!t.IsGenericType
    || t.GetGenericTypeDefinition() != typeof(WebUserControlBase<>))
{
    t = t.BaseType;
}

T次に、のジェネリック型引数を反映して取得しますt

tこれは例であり、製品コードではないため、まったく派生しない型を表す場合は処理していませんWebUserControlBase<T>

于 2013-03-20T09:49:03.307 に答える
1

.NET 4.5を使用している場合:

typeof(MyUserControl).BaseType.GenericTypeArguments.First();
于 2013-03-20T09:44:12.953 に答える
1

メソッドを使用できますType.GetGenericArguments

ジェネリック型の型引数またはジェネリック型定義の型パラメーターを表すTypeオブジェクトの配列を返します。

好き

typeof(MyUserControl).BaseType.GetGenericArguments()[0]

このメソッドの戻り型は System.Type[]。であるため、配列要素は、ジェネリック型の型引数のリストに表示される順序で返されます。

于 2013-03-20T09:44:37.573 に答える