将 IsAssignableFrom 与“开放”泛型类型一起使用

2023-11-23

使用反射,我试图找到从给定基类继承的类型集。没花很长时间就搞清楚了简单类型,但当涉及到泛型时我就被难住了。

对于这段代码,第一个 IsAssignableFrom 返回 true,但第二个返回 false。然而,最终的作业编译得很好。

class class1 { }
class class2 : class1 { }
class generic1<T> { }
class generic2<T> : generic1<T> { }

class Program
{
    static void Main(string[] args)
    {
        Type c1 = typeof(class1);
        Type c2 = typeof(class2);
        Console.WriteLine("c1.IsAssignableFrom(c2): {0}", c1.IsAssignableFrom(c2));

        Type g1 = typeof(generic1<>);
        Type g2 = typeof(generic2<>);
        Console.WriteLine("g1.IsAssignableFrom(g2): {0}", g1.IsAssignableFrom(g2));

        generic1<class1> cc = new generic2<class1>();
    }
}

那么如何在运行时确定一个泛型类型定义是否派生自另一个泛型类型定义呢?


来自回答另一个问题:

public static bool IsAssignableToGenericType(Type givenType, Type genericType)
{
    var interfaceTypes = givenType.GetInterfaces();

    foreach (var it in interfaceTypes)
    {
        if (it.IsGenericType && it.GetGenericTypeDefinition() == genericType)
            return true;
    }

    if (givenType.IsGenericType && givenType.GetGenericTypeDefinition() == genericType)
        return true;

    Type baseType = givenType.BaseType;
    if (baseType == null) return false;

    return IsAssignableToGenericType(baseType, genericType);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 IsAssignableFrom 与“开放”泛型类型一起使用 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 如何在谷歌应用程序引擎上运行maven项目

    我按照这个教程 http software danielwatrous com wordpress plugin licensing wicket on google app engine 我将谷歌应用程序引擎库添加到该项目中 然后我想检查
  • 将图像保存到 MemoryStream - 一般 GDI+ 错误

    我的应用程序概述 在客户端 使用网络摄像头拍摄一系列快照 提交时 我希望将图像转换为字节数组 并将该字节数组发送到我编写的服务 我的问题 我正在尝试将单个图像保存到MemoryStream 但它继续崩溃 吐出消息 GDI 中发生一般错误 当
  • MetaMask 与 Coinbase 钱包冲突

    我正在尝试从我的 dapp 连接到元掩码 按照文档 https docs metamask io guide getting started html connecting to metamask 但当我打电话时eth requestAcc
  • 如何刷新 Android 列表适配器,以便显示新添加的项目

    我正在做一个项目 它只是显示任务列表并向其中添加新任务 我有 3 节课 一台用于添加 一台用于查看 一台用于保存所有信息 或者我认为是这样 我的列表中已有 2 个任务 并且它们已正确显示 问题是 当我add新任务不会在视图中显示它们 我尝试
  • Twig模板不能包含php模板

    我遇到了一个问题 这对我来说相当不清楚且难以理解 我尝试制作日历小部件 它应该显示在我网站的每个页面上 所以 我认为它应该是平均模板 没有参数 不是每个网站 我尝试将其作为树枝模板 我设法渲染日历 但在获取日期对象时遇到问题 这是获取渲染日
  • Active Directory 用户组成员身份 GroupPrincipal

    我正在尝试使用GroupPrincipal 的一部分System DirectoryServices AccountManagement名称空间 来填充字符串类型的列表 以便我可以检查用户是否是 Active Directory 组的成员
  • python passlib:“轮次”的最佳值是多少

    来自passlib 文档 对于大多数面向公众的服务 通常可以让登录时间长达 250 毫秒 400 毫秒 然后用户就会开始感到厌烦 那么什么是最有价值的rounds in a 登录 注册如果我们认为有一次调用数据库对于登录尝试 它使用Mong
  • 如何使用 printf 打印非空终止字符串?

    假设我在运行时知道字符串的长度 如何使用 printf 打印非空终止字符串 printf s length string 与其他参数一起使用 printf integer d string s number f integer length
  • GNU Autotools:无需版本信息即可重建

    我需要构建一个配置有自动工具的库 通常configure make make install步骤生成版本化共享库 例如libfoo so x x是否可以修改configure ac或Makefile am 当然还有autoreconf 以便
  • C# 游戏网络库

    我正在使用 Net v2 开发在线策略游戏 虽然游戏主要是战略性的 但它确实有一些需要合理网络性能的战术元素 我计划对战略数据使用 TCP 数据包 对战术数据使用 UDP 数据包 编辑 我忘了提及 出于几个原因 我正在放弃 WCF 和 NE
  • Kafka - 反序列化消费者中的对象

    我们正在考虑在我们的消息传递中使用 Kafka 并且我们的应用程序是使用 Spring 开发的 所以 我们打算使用spring kafka 生产者将消息作为 HashMap 对象放入队列中 我们有 JSON 序列化器 并且假设映射将被序列化
  • 如何用reactjs合并两个对象数组?

    我有一个反应大日历 我想从后端获取本周的事件 从本地存储获取其他几周的事件 我的代码是 componentDidMount fetch url then Response gt Response json then data gt let
  • 将列名转换为第一行

    我想将以下数据框转换为 json df A sector B sector C sector TTM Ratio 35 99 12 70 20 63 14 75 23 06 RRM Sales 114 57 1 51 5 02 1 00 4
  • 使用 Java 8 lambda 表达式过滤列表

    我有一个Project class class Project List
  • java中x++和++x有区别吗?

    java中 x和x 有区别吗 x 称为前增量 而 x 称为后增量 int x 5 y 5 System out println x outputs 6 System out println x outputs 6 System out pr
  • 如何在ios应用程序中将自定义字体系列设置为系统字体[重复]

    这个问题在这里已经有答案了 我正在开发一个 ios 应用程序 其中我必须为 UI 使用自定义字体 我知道如何在应用程序中集成新的自定义字体 为此我有 下载扩展名为 ttf 的字体系列文件 将它们添加到资源包中 在 info plist 文件
  • Qemu Freescale i.MX6 DualLite SABRE:根文件系统未挂载

    目标 模拟 Qemu 特别支持的 sabrelite Freescale i MX6 Quad SABRE Lite Board Cortex A9 执行 qemu system arm M 它显示 Qemu 版本 2 10 1 主机 fe
  • Visual Studio 中(基于字符的)STL(流)容器的编译错误

    这基本上是同一个问题 SO C2491 std numpunct id 不允许定义dllimport静态数据成员 关闭 但考虑以下事实 在我看来 这是一个完全有效的问题 根据 SO 如何创建一个最小的 完整的 可验证的示例 真不知道为什么有
  • 在 Windows 上编写轻量级 GUI 程序的最快途径是什么?

    我想要一个小型 此可执行文件必须在 x86 64 架构以及 Itanium 芯片上的 32 位和 64 位 Windows XP Vista Server 2003 和 Server 2008 版本上运行 如果我们只需要构建一次就可以在所有
  • 将 IsAssignableFrom 与“开放”泛型类型一起使用

    使用反射 我试图找到从给定基类继承的类型集 没花很长时间就搞清楚了简单类型 但当涉及到泛型时我就被难住了 对于这段代码 第一个 IsAssignableFrom 返回 true 但第二个返回 false 然而 最终的作业编译得很好 clas