私は持っています:
public class MyUserControl : WebUserControlBase <MyDocumentType>{...}
MyDocumentType
別のクラスにいる場合のTypeNameを取得するにはどうすればよいですか?
私は持っています:
public class MyUserControl : WebUserControlBase <MyDocumentType>{...}
MyDocumentType
別のクラスにいる場合のTypeNameを取得するにはどうすればよいですか?
次のようなものを使用できます。
typeof(MyUserControl).BaseType.GetGenericArguments()[0]
クラスがから直接派生していることがわかっT
ている場合に、タイプを取得する方法を示す回答はたくさんあります。:に遭遇するまで階層を上に移動できるようにしたい場合は、次の方法で行います。WebUserControlBase<T>
WebUserControlBase<T>
var t = typeof(MyUserControl);
while (!t.IsGenericType
|| t.GetGenericTypeDefinition() != typeof(WebUserControlBase<>))
{
t = t.BaseType;
}
T
次に、のジェネリック型引数を反映して取得しますt
。
t
これは例であり、製品コードではないため、まったく派生しない型を表す場合は処理していませんWebUserControlBase<T>
。
.NET 4.5を使用している場合:
typeof(MyUserControl).BaseType.GenericTypeArguments.First();
メソッドを使用できますType.GetGenericArguments
。
ジェネリック型の型引数またはジェネリック型定義の型パラメーターを表すTypeオブジェクトの配列を返します。
好き
typeof(MyUserControl).BaseType.GetGenericArguments()[0]
このメソッドの戻り型は System.Type[]
。であるため、配列要素は、ジェネリック型の型引数のリストに表示される順序で返されます。