c# - 我怎么知道两个班级都来自同一个通用班级
问题描述
这是示例代码。我怎么知道 Foo 和 Bar 都来自同一个类 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<,>));
?
推荐阅读
- c# - 创建/使用属性来获取会话变量 C#
- xslt - 有没有办法在 renderX (XSLT) 中的两个流段之间添加一条直线
- python - Python-数据帧循环函数解密
- tensorflow - 运行 TensorFlow label_image 示例会引发访问冲突
- angular - 如何在不使用 npm 的情况下以角度在本地托管引导程序
- vba - IE VBA打开网页等于点击第一个网页链接
- php - 在具有 polylang 支持的 wordpress 中为登录用户和来宾用户设置不同的页面
- dart - DARTFMT 搞乱了@Component 装饰器格式
- java - 如何在 HTML 页面中部署 JavaFX 应用程序?
- python-2.7 - 在 matplotlib 3D scatter 中将一点放在前面