C# 我怎么知道这两个类都来自同一个泛型类

C# 我怎么知道这两个类都来自同一个泛型类,c#,reflection,generic-programming,C#,Reflection,Generic Programming,下面是示例代码。我怎么知道Foo和Bar来自同一个类库 类程序 { 静态void Main(字符串[]参数) { var foo=typeof(foo).IsAssignableFrom(typeof(Base)); var bar=typeof(bar).IsAssignableFrom(typeof(Base)); } } 公共抽象类基 { 公共抽象输出运行(TInput输入); } 公共类Foo:Base { 公共重写字符串运行(int输入) { 返回input.ToString(); }

下面是示例代码。我怎么知道Foo和Bar来自同一个类库

类程序
{
静态void Main(字符串[]参数)
{
var foo=typeof(foo).IsAssignableFrom(typeof(Base));
var bar=typeof(bar).IsAssignableFrom(typeof(Base));
}
}
公共抽象类基
{
公共抽象输出运行(TInput输入);
}
公共类Foo:Base
{
公共重写字符串运行(int输入)
{
返回input.ToString();
}
}
公共类栏:基本
{
公共重写字符串运行(字符串输入)
{
返回输入。替换(“.”,“”)。ToString();
}
}

要编译代码,需要将
Base
更改为
Base
,因为它有两个类型参数。仍然
IsAssignableFrom
不应该工作,因为这样的东西可能对你有用:

var foo = typeof(Foo).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
var bar = typeof(Bar).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
var foo=typeof(foo).BaseType.GetGenericTypeDefinition()=(typeof(Base));
var bar=typeof(bar).BaseType.GetGenericTypeDefinition()==(typeof(Base));

?编译错误可以通过var foo=typeof(foo)解决。IsAssignableFrom(typeof(Base));var bar=typeof(bar).IsAssignableFrom(typeof(Base));为了确保你以正确的方式解决问题,如果他们都继承了某个特定类型的泛型类,你打算怎么办?对不起,伙计们,刚刚更新了问题。这里已经回答了我想@StewartRitchie谢谢,伙计@Dongdong你错过了
.BaseType.GetGenericTypeDefinition()==(typeof(Base))
part=)@Dongdong很高兴它有帮助!但请注意,它只适用于此层次结构,如果引入更多层次的继承,则需要进行更复杂的检查。是的,您是对的,刚刚尝试过,如何解决层次结构问题?你能为层次结构提供更多的代码吗?我应该开始一个新的问题吗?@Dongdong正如Stewart Ritchie所建议的,所以你基本上需要通过循环/递归检查
BaseType
,并检查它是否为泛型,是否等于搜索的类型。
var foo = typeof(Foo).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
var bar = typeof(Bar).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));