在通用 C# 类中链接隐式运算符

2024-04-28

对于以下通用 C# 类,我想将 T 转换为 K:

public abstract class ValueType<T,K> : IValueType<T> where K : ValueType<T,K>,new()
{     
    public abstract T Value { get; set; }     

    public static implicit operator ValueType<T,K>(T val) 
    {         
        K k = new K();
        k.Value = val;
        return k;    
    }
}

如果我要实现直接运算符implicit operator K(T val)这会导致编译时错误 (CS0556)。

我想我可以尝试链接隐式运算符:

public static implicit operator K(ValueType<T,K> vt){
    return (K)val;
}

但下面的例子仍然抱怨它无法转换:

public class Test : ValueType<int, Test>
{
    public override int Value{ get; set; }
}

Test t = 6; //complains it's unable to be converted
Console.WriteLine(t.Value);

如果可能的话,我真的想避免显式强制转换。

这个问题延伸至另一个问题 https://stackoverflow.com/questions/5949390我之前提过。


实现您自己的隐式转换逻辑的规则非常严格,如果您要执行像这样的特别复杂的操作,您可能应该非常熟悉规范的第 6.4.4 节和 10.10.3 节。

简而言之,您应该了解的一些关键规则是:

  • 您定义转换的类型必须出现在用户定义转换的“to”或“from”部分中。你不能创建一个类 C 来定义从 E 到 F 的转换; C 一定在某个地方。
  • 永远不可能用您自己的隐式转换来替换内置的隐式转换;例如,当从 C 转换为对象时,您不能使特殊行为发生。
  • 用户定义的隐式转换将与最多两个内置隐式转换“链接”,但不会与任何其他用户定义的转换“链接”。例如,如果您有一个从 C 到 D 的用户定义隐式转换,以及一个从 D 到 IFoo 的内置隐式转换,那么您将获得从 C 到 IFoo 的隐式转换。但是,如果 D 有用户定义的到 E 的隐式转换,那么您就无法免费获得从 C 到 E 的隐式转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在通用 C# 类中链接隐式运算符 的相关文章

随机推荐

  • 尝试在 Angular 项目中导入 date-fns 时,Jest 测试失败

    我最近将我的一个 Angular 项目更新到 Angular 13 更新后 我在尝试在项目中运行单元测试时遇到了一些奇怪的错误 我在一个新的 Angular 项目中创建了一个最小的示例来重现此行为 import format from da
  • HotSpot使用的Mark-Compact算法是什么?

    当阅读 Mark Compact 章节时垃圾收集手册 https rads stackoverflow com amzn click com 1420082795 提出了一系列替代方案 但其中大多数看起来很旧 理论上 例如 2 指压缩和 L
  • 纱线堆的使用量随着时间的推移而增长

    我们在 AWS EMR 上运行 Spark Streaming 作业 该作业将稳定运行 10 到 14 小时 然后崩溃 并且 stderr stdout 或 Cloudwatch 日志中没有明显错误 在此崩溃之后 任何重新启动作业的尝试都将
  • 在运行时在 iOS 上添加框架

    首先 我将描述我的用例 说明为什么我需要在 iOS 上运行时添加框架 假设我在 iOS 设备上有一个应用程序 该应用程序需要一些第三方框架来添加一些外部功能 现在 功能有很多 所以 所需的框架数量也会很多 用户可能不需要很多功能 只是一小部
  • 重新格式化 csv 文件

    我有这个 csv 文件 其中只有两个条目 这里是 Meat One Abattoirs Exporters Food Delivery Butchers Retail Meat Dealers Retail Meat Freezer Mea
  • R语言赋值

    我想知道 R 语言中的赋值是如何工作的 考虑以下 R shell 会话 gt x lt c 5 6 7 gt x 1 lt 10 gt x 1 10 6 7 gt 我完全理解 创建向量 5 6 7 并将其绑定到 符号 x 之后 x 会反弹到
  • Objective-C 类别导致无法识别的选择器

    我的项目有一个UIImage我想从另一个类调用的类别函数 我正确导入了图像类别的头文件 并且在没有警告的情况下编译了项目 问题是当我打电话时UIImage类别函数我看到一个无法识别的选择器错误NSInvalidArgumentExcepti
  • 缺少 /var/lib/mysql/mysql.sock 文件

    我正在尝试访问 mysql 当我运行 mysql 命令时 我得到以下信息 root ip 10 229 65 166 tpdatabase 1 8 0 28356 mysql 错误 2002 HY000 无法连接到 通过socket本地My
  • 如何在 NavHostFragment 中检索当前片段?

    我试图在新的导航组件中找到一种方法 但我没有找到任何相关内容 我当前的目的地是 mainHostFragment findNavController currentDestination 但我无法获得对显示片段的任何引用 参考显示的片段 A
  • 仅使用 fprintf 和 fscanf 替换文本文件中的字符串

    抱歉问这么简单的问题 这是我作业的一部分 我被困住了 如你看到的 include
  • Spring中需要多个相同类型的bean

    将其标记为重复之前的请求 我浏览了论坛 但在任何地方都找不到该问题的解决方案 我正在使用 Spring 3 2 编写代码 一切都是纯粹基于注释的 该代码接收从不同 XSD 文件派生的 XML 文件 所以我们可以说 有五个不同的 XSD A1
  • 在 Python 中使用 argparse 处理无效参数

    我在用argparse https docs python org 2 library argparse html解析命令行参数 默认情况下 在收到无效参数时 它会打印帮助消息并退出 是否可以自定义 argparse 在收到无效参数时的行为
  • Nonetype 错误/使用 python 的 beautifulsoup 没有打印任何元素

    所以我尝试使用 python 比较 2 个列表 其中一个包含我从网站获取的 1000 个链接 另一个包含一些单词 这些单词可能包含在第一个列表的链接中 如果是这种情况 我想得到一个输出 我打印了第一个列表 它确实有效 例如 如果链接是 ht
  • Powershell CMD.exe 和路径中的空格

    我在使用执行命令时遇到问题cmd exe在 PowerShell 中 问题是命令的路径中有空格 似乎是 PowerShell 的普遍问题 以下是摘录 base dir resolve path this path has spaces in
  • 有没有办法查看 Docker for Windows 上的容器磁盘使用情况?

    我很好奇除了作为容器映像一部分的层之外 是否还有一种方法可以查看正在运行的 Windows 容器使用了多少磁盘空间 基本上 容器自创建以来 增长 了多少 在 Linux 或在 HyperV 中运行的 Linux 容器 中 这将是docker
  • 熊猫在移动的数据帧上滚动

    这是一段代码 我不明白为什么在最后一列 rm 5 上 前 4 项得到 NaN 我知道对于 rm 列 前 4 项未填充 因为没有可用数据 但如果我移动列计算 应该进行 不是吗 同样 我不明白为什么 rm 5 列中有 5 个而不是 4 个项目是
  • AWS 上的多租户应用程序 - 多个 SSL 证书安装策略

    我正在为 Rails 多租户应用程序做一些规划 并且想知道处理自定义域证书的最佳方法是什么 应用程序是相当沼泽标准 ELB 应用程序服务器和多租户数据库 在我当前的用例中 每个租户都有一个自己独有的应用程序子域 这通常是通过通配符证书来处理
  • 使用 UIWebView loadRequest 的常规块 56、1024、8、244、24 内存泄漏

    我遇到了内存泄漏 但无法通过泄漏 构建 分析或整体检查来找出如何修复 我有一个非常强烈的想法 这是由于我的 UIWebview 加载 JavaScript 的 loadRequest 命令造成的 但我不知道出了什么问题 这是我的设置 我有一
  • Android WebView - 带有经过身份验证的代理

    我目前正在尝试调试围绕 WebView 构建的 Android 应用程序 我负责处理的开发网络环境 不是我的选择 这是 企业 安全决策 是WPA WiFi 代理服务器 代理身份验证 虽然a上的说明以前的答案非常有帮助 https stack
  • 在通用 C# 类中链接隐式运算符

    对于以下通用 C 类 我想将 T 转换为 K public abstract class ValueType