111,092
社区成员




public static void ShowImpl<T>()
{
var type = typeof(T);
foreach (var t in type.Assembly.GetTypes().Where(t => !t.IsAbstract && type.IsAssignableFrom(t)))
{
Console.WriteLine(t.FullName);
}
}
ShowImpl<IPassengerCarrier>();
和题目差不多一个意思的方式是获取具体类型后,创建它的实例,再调用实例的ToString方法(用了点特别的方式):
public static void ShowImpl2<T>(Action<T> action)
{
var type = typeof(T);
foreach (var v in type.Assembly.GetTypes().Where(t => !t.IsAbstract && type.IsAssignableFrom(t)).Select(t => t.GetConstructor(Type.EmptyTypes)).Where(ci => ci != null).Select(ci => Expression.Lambda<Func<T>>(Expression.New(ci)).Compile()()))
{
action(v);
}
}
ShowImpl2<IPassengerCarrier>(v => Console.WriteLine(v.ToString()));