在 C# 中定义泛型类型的显式转换

2023-12-19

作为练习的一部分,我试图为泛型类与特定类型一起使用时定义特定行为。更准确地说,我想知道是否可以为泛型类型定义显式转换运算符,即来自list<T> to int[]

不,我知道我可以简单地定义一个可以完成工作的方法,但这不是练习的目标。

假设泛型类list<T>我试图定义以下显式转换方法

class list<T> {
...

    public static explicit operator int[](list<T> _t) where T : System.Int32 
    {
        // code handling conversion from list<int> to int[]
    }
}

但这是行不通的。关于如何让编译器吞下这个的任何想法?


首先,please更改类的名称以遵循 .NET 约定and避免与发生冲突List<T>.

如果不这样做,你基本上就无法做你想做的事情。你can定义一个有效的转换all T,然后针对不同情况采取不同的操作。所以你可以写:

public static explicit operator T[](CustomList<T> input)

然后以不同的方式对待这个如果T is int。做最后一部分不太好,但如果你真的愿意的话,你可以做。

无论类型参数如何(在类型参数声明点声明的约束内),特定泛型类型上可用的成员都是相同的 - 否则它不是真正的泛型。

作为替代方案,您可以在其他地方的顶级静态非泛型类型中定义扩展方法:

public static int[] ToInt32Array(this CustomList<int> input)
{
    ...
}

这将允许你写:

CustomList<int> list = new CustomList<int>();
int[] array = list.ToInt32Array();

就我个人而言,我发现这比显式转换运算符更清晰。

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

在 C# 中定义泛型类型的显式转换 的相关文章

  • C++ 中的可变参数函数声明中省略了逗号

    我习惯于这样声明可变参数函数 int f int n 读书时C 编程语言我发现书中的声明省略了逗号 int f int n the comma has been omitted 这个语法似乎是 C 特定的 因为当我尝试使用 C 编译器编译它
  • CRTP 能否完全取代小型设计的虚拟功能?

    Is CRTP http en wikipedia org wiki Curiously recurring template pattern有足够的能力智胜virtual功能齐全 我认为 CRTP 的唯一缺点是为每个重复模式生成大量代码
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • ASP.NET Core 测试 - 没有方法 'public static IHostBuilder CreateHostBuilder(string[] args)

    我正在尝试在测试中设置我的应用程序并在中使用Startup s Configure method context Database EnsureCreated 并期待着Sqlite文件出现在Test sbin文件夹 这是我的代码 using
  • Python NET 调用具有返回值和输出参数的 C# 方法

    我有以下静态 C 方法 public static bool TryParse string s out double result 我想使用 Python NET 包从 Python 调用它 import clr from System
  • .NET 查询字符串值的正则表达式

    我需要从 Url PathAndQuery 中删除任何 id SomeValue 其中 SomeValue 可以是整数或字符串 它后面可能有也可能没有另一个 符号 所以它可能是 somepage aspx cat 22 id SomeId
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • 如何使用实体框架更新特定记录的一个字段?

    我想要更新一个名叫 Pejman 的人的家庭情况 这是我的对象类 public class Person public int Id get set public string FirstName get set public string
  • 在 C、C++ 中实现腐蚀、膨胀

    我对二值图像的膨胀是如何完成的有理论上的了解 AFAIK 如果我的 SE 结构元素 是这样的 0 1 1 1 在哪里 代表中心 我的图像 二进制是这样的 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0
  • 列表框显示类名称而不是值

    我正在开发一个项目 其中用户应该向动物输入值 名称 年龄 性别等 并且用户输入的值应该显示在列表框中 这些类相互继承 以下是继承的工作原理 Animalclass 是所有类的父类 Mammal类继承自Animal class Dog类继承自
  • 创建 .ICS 文件,添加到 Outlook

    我正在创建一个简单的应用程序 允许用户下载 ICS 文件 并将其导入到他们选择的日历应用程序 站点中 我对创建过程感到满意 但对在 Outlook 中打开它们有疑问 将使用C ASP NET进行开发 当我打开一个日历时 它会添加一个新日历
  • 自定义编译器警告

    在 Net 中使用 ObsoleteAtribute 时 它 会向您发出编译器警告 告诉您该对象 方法 属性已过时 应使用其他内容 我目前正在从事一个需要大量重构前员工代码的项目 我想编写一个自定义属性 可用于标记方法或属性 这些方法或属性
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • 接口作为类型约束和接口作为参数之间的区别?

    如果我想创建一个采用实例的方法IList作为参数 或任何其他接口 但让我们使用IList作为一个例子 我可以创建一个带有类型约束的通用方法 例如 public static void Foo1
  • C/C++ 特殊 CPU 功能的使用

    我很好奇 新的编译器是否使用了新 CPU 中内置的一些额外功能 例如 MMX SSE 3DNow 所以 我的意思是 在最初的 8086 中甚至没有 FPU 所以旧的编译器甚至不能使用它 但新的编译器可以 因为 FPU 是每个新 CPU 的一
  • 在 Qt C++ 中使用多个键

    我正在构建 坦克 游戏 我使用关键事件在地图上运行我的坦克 实际上我当时只能使用一把钥匙 但我需要有能力去完成任务 同时向上和离开 这是我的单键事件代码 switch event gt key case Qt Key Up if ui gt
  • SoapHttpClientProtocol:以流而不是字符串的形式获取响应?

    我正在使用一种网络服务 它可以一次性输出大量数据 响应字符串可能约为 8MB 虽然在台式电脑上这不是问题 但嵌入式设备在处理 8MB 字符串对象时会发疯 我想知道是否有办法以流的形式获取响应 目前我正在使用如下方法 我尝试使用 POST 请
  • 使用 STL 迭代器而不初始化它

    我想做这样的事情 container iterator it NULL switch eSomeEnum case Container1 it vecContainer1 begin break case Container2 it vec
  • 有没有 C# 到 C 的转换工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道 C 与 NET Framework 不同 C 是一种符合 ECMA ECMA 334 和 ISO
  • C 警告函数调用中缺少标记

    这是我的警告 Missing sentinel in function call 我怎样才能删除它 我正在使用 linux 和 gcc 编译器 看来您可能没有终止数组声明NULL 如果没有 null 您可能会遇到一些内存怪异 因为运行时将不

随机推荐

  • 在 PHP 开关中使用 strstr

    我只是想不出代码 我有太多 if 语句 我想将其更改为 switch 语句 但我找不到逻辑 目前我有 if strstr var texttosearch echo string contains texttosearch if strst
  • org.h2.jdbc.JdbcSQLException:未找到列“ID”

    我的代码中有以下 DDL CREATE TABLE IF NOT EXISTS SOMETABLE id BIGINT AUTO INCREMENT NOT NULL FOREIGN KEY id REFERENCES OTHERTABLE
  • Javascript (MVC) 从数据库加载图像(字节数组)

    Stack 上有很多这个问题的答案 但没有一个对我有用 我需要通过对控制器的 ajax 调用检索字节数组 在 javascript 中设置图像标签的 src 属性 我必须在客户端执行此操作 因为我正在动态构建一些 html 在下面的简单示例
  • 如何在 ASP.Net 中转储响应标头

    我正在使用 VSTS 2008 C Net 3 5 来开发 ASP Net 我想转储特定 aspx 文件返回给客户端的所有响应标头 有什么想法可以轻松做到这一点吗 我知道如何使用 Response Headers 集合 但我的困惑是在哪里枚
  • 如何告诉屏幕阅读器链接已禁用?

    我有一个页面n部分 这些部分是隐藏的 只能通过单击各自的链接来显示 页面加载时 只有第一个链接处于活动状态 其余 n 1 个链接处于活动状态href 基于某种逻辑 其他链接被单独激活 如何让屏幕阅读器理解该链接是disabled or 停用
  • Handsontable:隐藏一些列而不更改数据数组/对象

    我有一个数据要在网格中显示 我正在使用 Handsontable 来显示数据 每个第三列都计算为前两列的差值 例如 第三列渲染为第一列和第二列的总和 这是由自定义渲染器通过取总和来完成的i 1 and i 2列 这是我的 差异 列的自定义渲
  • React - Axios 调用发出太多请求

    我通过制作游戏项目来学习 React 和 Redux 我想通过API获取数据 属性 但它导致太多请求 我猜它可以与直接在功能性反应组件中放置 axios 调用有关 但我不知道如何修复它 function Attributes attribu
  • 如何在 Android 中下载并保存图像

    如何在 Android 中从给定的 URL 下载并保存图像 编辑截至 2015 年 12 月 30 日 图像下载终极指南 最后一次重大更新 2016 年 3 月 31 日 TL DR 又名 别再说了 给我代码吧 跳到这篇文章的底部 复制Ba
  • 如何将前导零的数字转换为字符串并保留原​​始数字

    我正在尝试将以 0 开头的数字转换为字符串 例如 变量 x 01127160037 but when I convert it to string it become 157081631 我期望得到字符串中 01127160037 的实际结
  • 页面刷新后QWebEngineView问题

    当我切换用户代理时问题就解决了 但不知怎的 当我刷新页面或从whatsapp注销时它又回来了 我已经实现了一个用户代理打印机来检查用户代理是否重置回来 但事实并非如此 如何我能解决这个问题吗 code import sys from PyS
  • Java - 检查 JTextField 是否为空

    所以我知道这是一个很受欢迎的问题并且已经找到了解决方案 但当我尝试这样做时 它无法正常工作 我的 JTextField 为空并且按钮未启用 当我在文本字段中写入内容时 按钮不会启用 所以我的程序应该每秒检查该字段是否为空 一旦有人在文本字段
  • ORA-06550 和 PLS-00103

    HI 我正在使用 UNIX 操作系统并在 oracle 上工作 我收到以下错误消息 E ORA 06550 line 1 column 8 PLS 00103 Encountered the symbol when expecting on
  • 将多个文件夹压缩为 1 个 zip - Google 云端硬盘脚本

    我想为 Google Drive 制作一个脚本 我想每周备份我的文件夹并将它们存储在 Google 云端硬盘中的另一个文件夹中 关于每周触发 我已经可以了 但是我遇到了问题 因为我找不到压缩整个文件夹的方法 我要压缩的文件夹有多个子文件夹和
  • 为什么链接器会在 .rela.plt 中生成看似无用的重定位?

    首先 我正在玩的玩具程序 prog c int func1 int main int argc char const argv func1 return 0 lib c int func1 return 0 构建 gcc O3 g shar
  • Drupal 7 密码哈希

    我在这里有点进退两难 我有一个 drupal 7 数据库用户表 以及相应的密码 所有这些密码都已自然加密 我的假设是这些是 MD5 哈希值 但不完全是 这里的挑战是 我们在一个同伴网站中使用同一组用户 该网站使用相似的凭据但使用不同的技术
  • 基于高度的CSS正方形[重复]

    这个问题在这里已经有答案了 可以做一个正方形吗div与基于它的CSSheight in pixels 这个问题是similar to this one https stackoverflow com questions 23789143 m
  • HTML5 标签显示语法高亮

    我想知道 HTML5 中是否有一个标签可以自动突出显示 HTML 和 或 PHP 的语法 我正在编写一个指南 其中包含一些代码 因为我使用了很多新的 html5 标签 我使用了指南大纲部分 所以我想使用原生 html5 中的一些东西 如果这
  • 杀死 Haskell 二进制文件

    如果我按 Ctrl C 则会引发异常 总是在线程 0 中 如果您愿意 您可以捕获此问题 或者更有可能的是 运行一些清理操作 然后重新抛出它 但通常的结果是让程序以某种方式停止 现在假设我使用 Unixkill命令 据我了解 kill基本上发
  • 以多种颜色绘制列表列表中的元素

    我正在尝试绘制列表列表中的元素 特别是根据每个点所属的类对每个点进行着色 使用外部列表索引作为 x 值 使用内部列表的每个元素的值作为 y 值 一个示例列表 有 2 个子列表 sample list lt list list A 0 B 0
  • 在 C# 中定义泛型类型的显式转换

    作为练习的一部分 我试图为泛型类与特定类型一起使用时定义特定行为 更准确地说 我想知道是否可以为泛型类型定义显式转换运算符 即来自list