将 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 与“开放”泛型类型一起使用 的相关文章

  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 如何在谷歌应用程序引擎上运行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