(开放泛型类型)不指定参数的 typeof 泛型类型

2023-12-09

有人可以向我解释一下 C# 语言的需求吗typeof(SomeGenericType<>),没有指定具体参数。

我整理了以下示例:

        var t1 = typeof(Nullable<>);
        var t2 = typeof(Nullable<int>);
        var q = 1 as int?;

        var b1 = t1.IsInstanceOfType(q); //false
        var b2 = t2.IsInstanceOfType(q); //true

我首先想到typeof(Nullable<>)比“更通用”t2,它指定通用参数int, but b1原来是false- 所以实例int?不是以下实例Nullable<>.

那么变量应该如何定义b1 to be true?它有什么实际用途?


那么应该如何定义变量才能使 b1 为真呢?

不可以。 (事实上​​,与Nullable<T>无论如何,你都会遇到有趣的拳击问题,但我们就这样......)

在执行时,值始终是closed types. Nullable<>, List<> are open通用类型。打电话从来没有用IsInstanceOfType就这样一个类型。但这并不意味着它毫无用处。

通常,开放类型用于反射。例如:

public IList CreateList(Type elementType)
{
    Type closedType = typeof(List<>).MakeGenericType(elementType);
    return (IList) Activator.CreateInstance(closedType);
}

上面可能有代码is通用,但会调用传入的较低级别Type取而代之的是值 - 然后列表可以返回堆栈并被转换为IEnumerable<T>为适当的值T.

同样,您可能想创建一个带有反射的封闭类型来调用其方法等。

You can also用它来查明特定类型是否实现了通用接口some类型参数 - 对于实现的每个接口,您可以查明它是否是通用的,获取通用类型定义,并查看它是否等于(比如说)IEnumerable<>.

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

(开放泛型类型)不指定参数的 typeof 泛型类型 的相关文章

随机推荐

  • Qt 通过 QNetworkAccessManager 扫描 Wi-Fi

    欢迎 我在扫描 Wi Fi 以获得 Wi Fi 中所有可用的连接时遇到问题 到目前为止我已经写了这段代码 include
  • java.util.Iterator 但无法导入 java.util.Iterator

    鉴于此代码 import java util Iterator private static List
  • Matlab打印板

    我是 Matlab 新手 有没有办法使用printmat打印2个字的标题 结果示例如下 Title One Title Two Title Three 11 22 33 22 33 44 这是我当前尝试修改的代码 matA 11 22 33
  • 如何在canvas、html5中旋转形状?

    我试图用这个旋转一条线 window onload function var canvas document getElementById foo var context canvas getContext 2d context moveT
  • 使用 Mockito 时模拟和监视有什么区别?

    使用 Mockito 间谍的用例是什么 在我看来 每个间谍用例都可以使用 callRealMethod 进行模拟处理 我看到的一个区别是 如果您希望大多数方法调用都是真实的 那么使用模拟与间谍可以节省一些代码行 是这样还是我错过了更大的图景
  • 如何在 MySQL 中使用“WITH”子句?

    我正在将所有 SQL Server 查询转换为 MySQL 并且我的查询已WITH他们都失败了 这是一个例子 WITH t1 AS SELECT article userinfo category FROM question INNER J
  • 遍历 NSData 并抓取块

    有什么方法可以迭代 NSData 以便我可以根据特定的字节模式拆分它 我需要将某些块分解成一个数组以便以后查找 拆分一个NSData在某些分隔符上 您可以使用以下命令搜索分隔符rangeOfData options range 然后使用分割
  • d3.IE 中的选择类型检查

    如何检查给定对象是否是d3选择 下面的代码打印true在 Chrome 和 Firefox 中 但是false在 Internet Explorer 中 console log d3 select document body instanc
  • 正确的安装顺序 VS 2012 Express 和 SQL Server 2012 Express

    在未安装任何 SQL Server 版本的 Win7 64 系统上 我安装了 Visual Studio 2012 for Web 我以为它会给我安装 SQL Server 2012 Express 的选项 但事实并非如此 现在我想在安装完
  • 德塔云平台无法使用FastAPI上传文件

    当我通过运行此代码时uvicorn main app一切正常 但是当我使用 Deta 运行它时 我得到Internal Server Error并且只有GET端点工作 POST一个甚至没有像应该的那样被调用 你能帮我么 提前致谢 impor
  • 本地数据库插入未存储

    这可能是我的一个愚蠢的错误 但我似乎无法理解它 我创建了一个新的空 C Windows 窗体应用程序 我添加了一个数据库 基于数据集 并将文件存储在我的解决方案资源管理器中 我添加了一个表Test带柱Name 我使用添加一条记录new Sq
  • Scala 方法调用中的大括号[重复]

    这个问题在这里已经有答案了 在 Scala 中 我们可以 println 你好 世界 摘自 Scala 编程 一书 这种用花括号代替圆括号的能力的目的 传入一个参数是为了让客户端程序员能够编写函数 大括号之间的文字 这可以使方法调用感觉更像
  • Linux 支持进程的内存隔离吗?

    更详细地说 问题是 没有root权限 一个进程是否可以读取 而不仅仅是写入 另一个进程的内存 例如 通过某种方式读取 proc gcore 或 proc PID mem 我还不确定他们的权限要求 我确实明白虚拟地址是实现的 每个进程都有自己
  • 如何在 ListView 中将图像从 PHP 服务器延迟加载到 Android

    我是 android 新手并正在探索它 我需要在如下所示的列表中动态加载用户图像 用户列表 我使用一张静态图像来显示资源文件夹中的用户图像 该列表是动态的 并且随着我的位置的变化而变化 但仅当我刷新它时 AddObjectToList jF
  • DOM 内容加载后附加的元素中的事件监听器

    我需要听一个 改变 事件
  • D3 区分具有拖动行为的元素的单击和拖动

    我无法成功区分click事件和drag使用 D3 js v3 绑定到两者的元素上的事件 下面代码中的圆圈被分配了拖动行为和click听众 演示在这里 var dragGroup d3 behavior drag on dragstart f
  • 将鼠标悬停在 li 上时更改文本颜色

    我想在出现链接时更改链接的文本颜色 li 元素悬停在上面 现在我有 nav li a hover margin left 10px padding left 10px background color 13118C color white
  • PHP、SimpleXML 对象的 json_encode、json_decode

    我的应用程序中的函数执行以下操作 使用史努比捕获网页 将结果加载到 DOMDocument 中 将 DOMDocument 加载到简单 XML 对象中 运行 XPath 来隔离所需文档的部分 对结果进行 json encode 并保存到数据
  • 何时在 Scala 方法声明中使用等号?

    带等号 object HelloWorld def main args Array String println Hello 没有等号 object HelloWorld def main args Array String println
  • (开放泛型类型)不指定参数的 typeof 泛型类型

    有人可以向我解释一下 C 语言的需求吗typeof SomeGenericType lt gt 没有指定具体参数 我整理了以下示例 var t1 typeof Nullable lt gt var t2 typeof Nullable