クラスのジェネリックパラメーターで指定された型を検出する方法はありますか?
たとえば、次の3つのクラスがあります。
public class Customer
{ }
public class Repository<T>
{ }
public class CustomerRepository : Repository<Customer>
{ }
public class Program
{
public void Example()
{
var types = Assembly.GetAssembly(typeof(Repository<>)).GetTypes();
//types contains Repository, and CustomerRepository
//for CustomerRepository, I want to extract the generic (in this case, Customer)
}
}
戻されたリポジトリオブジェクトごとに、どのタイプが指定されているかを確認できるようにしたいと思います。
それは可能ですか?
編集
@CuongLeのおかげで、これは機能していますが、乱雑に見えます....(resharperの助けもあります;))
var types = Assembly.GetAssembly(typeof(Repository<>))
.GetTypes()
.Where(x => x.BaseType != null && x.BaseType.GetGenericArguments().FirstOrDefault() != null)
.Select(x => x.BaseType != null ? x.BaseType.GetGenericArguments().FirstOrDefault() : null)
.ToList();