C#函数,它接受基类名称/类型作为参数,并返回其所有子类的名称
我需要编写一个函数,它接受一个基类名称并以C#返回其所有子类的名称。 大家都知道,在名称空间中,我们有几个基类,每个基类都有自己的子类。上述函数(将位于工具中)的目的是从用户处获取基类名称,然后返回其所有子类的名称。(我们可以在创建批处理文件时使用结果) 我假设我需要使用反射和泛型,但不确定如何使用。你能帮我一下吗 如果我将基类的名称作为字符串传递,函数会是什么样子? 如果我将基类名称作为泛型类型传递,应该是什么样的 评论后提问的版本: 根据答案中建议的页面,我尝试了以下函数,但它对kids和blahKids都返回nullC#函数,它接受基类名称/类型作为参数,并返回其所有子类的名称,c#,generics,reflection,base-class,C#,Generics,Reflection,Base Class,我需要编写一个函数,它接受一个基类名称并以C#返回其所有子类的名称。 大家都知道,在名称空间中,我们有几个基类,每个基类都有自己的子类。上述函数(将位于工具中)的目的是从用户处获取基类名称,然后返回其所有子类的名称。(我们可以在创建批处理文件时使用结果) 我假设我需要使用反射和泛型,但不确定如何使用。你能帮我一下吗 如果我将基类的名称作为字符串传递,函数会是什么样子? 如果我将基类名称作为泛型类型传递,应该是什么样的 评论后提问的版本: 根据答案中建议的页面,我尝试了以下函数,但它对kids和b
private object GetKidsOfBaseClass(string baseClass)
{
Type baseType = Type.GetType($"{baseClass}");
var blahKids = AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
.Where(p => p.IsSubclassOf(baseType));
var kids = Assembly.GetAssembly(baseType).GetTypes().Where(t => t.IsSubclassOf(baseType));
return kids;
}
第二版在@madreflection的建议之后:
以下代码适用于我:
private object GetKidsOfBaseClass(Type baseType)
{
var blahKids =
AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
.Where(p => p.IsSubclassOf(baseType)).ToList();
return blahKids;
}
以下是根据我在问题中添加的评论提出的解决方案:
private object GetKidsOfBaseClass(Type baseType)
{
var blahKids =
AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
.Where(p => p.IsSubclassOf(baseType)).ToList();
return blahKids;
}
你试过什么?听起来你知道它需要什么参数,你期望它返回什么。当然你有一些东西可以展示你到目前为止所做的努力。@Mad如果我在第二条评论中添加了一段代码,请你检查一下,并让我知道你的建议,谢谢@我刚刚编辑了一个问题!您传递的
基类是什么?我强烈建议接受Type
实例而不是名称,并将其留给调用方获取Type
实例<代码>类型。GetType不总是可靠的。好的库设计不会将消费者锁定在与库的用途无关的东西上,因为它起作用了!非常感谢。