我怎么知道 class 都来自同一个 Generic class
How can I know both class are from same Generic class
这里是示例代码。我怎么知道 Foo 和 Bar 都来自同一个 class Base<>?
class Program
{
static void Main(string[] args)
{
var foo = typeof(Foo).IsAssignableFrom(typeof(Base<,>));
var bar = typeof(Bar).IsAssignableFrom(typeof(Base<,>));
}
}
public abstract class Base<TInput, TOutput>
{
public abstract TOutput Run(TInput input);
}
public class Foo : Base<int, string>
{
public override string Run(int input)
{
return input.ToString();
}
}
public class Bar : Base<string, string>
{
public override string Run(string input)
{
return input.Replace(".", "").ToString();
}
}
为了编译代码,您需要将 Base<>
更改为 Base<,>
,因为它有两个类型参数。仍然 IsAssignableFrom
不应该工作原因,也许这样的事情对你有用:
var foo = typeof(Foo).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
var bar = typeof(Bar).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
?
这里是示例代码。我怎么知道 Foo 和 Bar 都来自同一个 class Base<>?
class Program
{
static void Main(string[] args)
{
var foo = typeof(Foo).IsAssignableFrom(typeof(Base<,>));
var bar = typeof(Bar).IsAssignableFrom(typeof(Base<,>));
}
}
public abstract class Base<TInput, TOutput>
{
public abstract TOutput Run(TInput input);
}
public class Foo : Base<int, string>
{
public override string Run(int input)
{
return input.ToString();
}
}
public class Bar : Base<string, string>
{
public override string Run(string input)
{
return input.Replace(".", "").ToString();
}
}
为了编译代码,您需要将 Base<>
更改为 Base<,>
,因为它有两个类型参数。仍然 IsAssignableFrom
不应该工作原因,也许这样的事情对你有用:
var foo = typeof(Foo).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
var bar = typeof(Bar).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
?