私は持っています:
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[]。であるため、配列要素は、ジェネリック型の型引数のリストに表示される順序で返されます。