检测泛型类型是否开放?

2024-01-10

我的程序集中有一堆常规的、封闭的和开放的类型。我有一个查询,我试图从中排除开放类型

class Foo { } // a regular type
class Bar<T, U> { } // an open type
class Moo : Bar<int, string> { } // a closed type

var types = Assembly.GetExecutingAssembly().GetTypes().Where(t => ???);
types.Foreach(t => ConsoleWriteLine(t.Name)); // should *not* output "Bar`2"

在调试开放类型的泛型参数时,我发现它们FullName为空(以及其他诸如DeclaringMethod) - 所以这可能是一种方式:

    bool IsOpenType(Type type)
    {
        if (!type.IsGenericType)
            return false;
        var args = type.GetGenericArguments();
        return args[0].FullName == null;
    }

    Console.WriteLine(IsOpenType(typeof(Bar<,>)));            // true
    Console.WriteLine(IsOpenType(typeof(Bar<int, string>)));  // false

是否有内置方法可以知道类型是否开放?如果没有,有更好的方法吗?谢谢。


你可以使用IsGenericTypeDefinition http://msdn.microsoft.com/en-us/library/system.type.isgenerictypedefinition(v=vs.110).aspx:

typeof(Bar<,>).IsGenericTypeDefinition // true
typeof(Bar<int, string>).IsGenericTypeDefinition // false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测泛型类型是否开放? 的相关文章

随机推荐

  • SQL Server 2005 中 LOCK_ESCALATION = TABLE 的等效项是什么?

    我有一个在 SQL Server 2008 中生成的脚本 但我需要针对 SQL Server 2005 数据库执行它 SQL Server 2005 中以下的等效语句是什么 ALTER TABLE dbo Event SET LOCK ES
  • Windows > 首选项中没有服务器

    我正在尝试将 Apache 服务器添加到 Eclipse Juno 我已经安装了 Apache 服务器 7 0 但是当我尝试将其添加到 Eclipse 环境中时 我在中看不到选项服务器窗口 gt 首选项 首选项中必须有一个名为 server
  • glFlush() 在透明背景的窗口上花费很长时间

    我使用的代码来自如何制作具有透明背景的OpenGL渲染上下文 https stackoverflow com questions 4052940 win32 how to make an opengl rendering context w
  • React渲染方法中的for循环[重复]

    这个问题在这里已经有答案了 我想为我的网格创建分页链接 我将 maxPages number 属性传递给组件 但我不能在渲染方法中使用 我能做些什么 var Pagination React createClass render funct
  • 反应路由器的位置状态在路由更改时变得未定义

    我想存储url query作为所在地的状态 history push history location search query toString state myState query toString 我怀疑当路线改变时会得到状态 但是
  • MySQL unique 1500 varchar 字段错误(#1071 - 指定的键太长)

    我有一个 varchar 1500 字段 链接 我想使其唯一 我对 mysql 配置进行了更改 并将长度增加到 3072 字节 ROW FORMAT DYNAMIC innodb file format Barracuda innodb l
  • VSCode 上的 PlatformIO 未编译:collect2.exe:错误:ld 返回 1 退出状态

    我最近不得不擦拭我的计算机 在一切准备就绪并运行之后 是时候打开我之前正在处理的一些 ESP32 程序了 发现 VSCode 上的 Platform IO 将不再编译 运行编译器后 我收到以下错误 Compiling pio build e
  • 使用 firebase 发送静音推送通知

    我想在晚上向用户发送通知 我不想播放任何声音 我只想让用户醒来时在状态栏上看到它 如何在用户设备 android 和 ios 上不播放声音的情况下发送推送通知 从 Firebase 通知 Web 控制台 你可以设置sound disable
  • x86 汇编指令执行计数

    大家好 我有一段代码 我想找到每个装配线执行的次数 我不在乎是通过分析还是仿真 但我想要高精度的结果 我曾经遇到过一个论坛 它提供了一些脚本代码来执行此操作 但我丢失了链接 谁能帮我集思广益一些方法来做到这一点 问候 Edit 好吧 我想我
  • 如何通过 Twitter API 拉取已验证帐户列表? [复制]

    这个问题在这里已经有答案了 可能的重复 如何仅通过经过验证的帐户在 Twitter 上搜索帖子 https stackoverflow com questions 4268193 how do i search twitter for po
  • 如何使用Python将文本文件读入列表或数组[重复]

    这个问题在这里已经有答案了 我正在尝试将文本文件的行读入 python 中的列表或数组中 我只需要能够在创建列表或数组后单独访问列表或数组中的任何项目 文本文件的格式如下 0 0 200 0 53 1 0 255 0 哪里的 如上所述 实际
  • 如何在 Odoo 中创建新附件?它们如何工作?

    我想从 python 代码创建附件 所以 我尝试过 self env ir attachment create store fname checksum ir attachment 表中的 store fname 和 checksum 列应
  • 为什么可空类型在这种情况下不相等?

    令人惊讶的是 下面的代码不会成功 int n1 null int n2 null Assert IsTrue n1 lt n2 Fails here 你知道为什么吗 在 C 和 VB Net 中使用带有 null 可空值的布尔逻辑常常违反逻
  • Tensorflow:GPU 利用率几乎始终为 0%

    我将张量流与 Titan X GPU 一起使用 并且我注意到 当我运行 CIFAR10 示例时 Volatile GPU utilization稳定在 30 左右 而当我训练自己的模型时 Volatile GPU utilization远非
  • L5 随机 TokenMismatchException

    我在 Laravel 5 中收到随机 TokenMismatchExceptions 在tokensMatch 我一直在尝试调试这个奇怪的问题 Log debug request gt session gt token token 输出如下
  • 对于知识库中不存在的问题,在网络聊天中出现“无法发送重试”错误

    我用 C 使用 Azure 创建了一个机器人 该机器人对于我的知识库中存在的问题运行良好 但是当我尝试不同的问题时 它给出了错误couldn t send retry在该问题下方并回复该问题Sorry my bot code is havi
  • 如何将 JSON 数据映射到类

    我创建了一个 ES6 类Babel https github com babel babel我想将从服务器获取的 JSON 数据映射到 ES6 类 有什么通用的方法可以做到这一点吗 User js export default class
  • 将每个整数转换为简单的 ASCII 图表

    我有一个包含一堆整数的文件 如下所示 6 2 3 4 3 目标是像视频游戏一样转换统计数据中的这些整数 例如 如果数字是 6 则统计数据必须是 如果数字是 4 结果一定是 我尝试了以下代码 但它不起作用 Here I put all the
  • 使用多个 SASS 文件

    我想将我的 巨大的 全局 css 文件分成多个文件 我用的是萨斯有没有一种简单的方法让 sass 观看多个文件 我想我可以使用 import 但只是想知道是否有另一种 更好 的方法 提前致谢 What 里奇 布拉德肖提到的是正确的 但是这是
  • 检测泛型类型是否开放?

    我的程序集中有一堆常规的 封闭的和开放的类型 我有一个查询 我试图从中排除开放类型 class Foo a regular type class Bar