C# 隐式转换“重载”和反射问题

2023-12-09

我遇到以下代码问题(可以编译但崩溃):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
{
    public struct MyBoolean
    {
        public bool Value { get; set; }

        //cast string -> MyBoolean
        public static implicit operator MyBoolean(System.String value)
        {
            return new MyBoolean() { Value = (value[0] == 'J') };
        }

        //cast bool -> MyBoolean
        public static implicit operator MyBoolean(bool value)
        {
            return new MyBoolean() { Value = value };
        }

        //cast MyBoolean -> bool
        public static implicit operator bool(MyBoolean value)
        {
            return value.Value;
        }
    }

    public class Foo
    {
        public MyBoolean TestProp { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyBoolean myBool = true;        //works

            myBool = "N";   //works

            Foo foo = new Foo();
            foo.TestProp = "J";             //works

            PropertyInfo pi = foo.GetType().GetProperty("TestProp");

            var obj = Convert.ChangeType("J", typeof(MyBoolean));       //throws an InvalidCastException

            pi.SetValue(foo, "J", null);       //throws an ArgumentException

        }
    }
}

我已经评论了那些不起作用的言论。有谁知道为什么 Convert.ChangeType 和 PropertyInfo.SetValue 似乎没有使用 MyBoolean 中定义的“重载”强制转换运算符?

顺便说一句,我在这里浏览了其他几个文档,但没有找到与问题完全匹配的内容。

此致 托马斯


Convert.ChangeType()不使用隐式运算符。您需要实现 MyBoolean 类型IConvertible.

第二个问题是相关的。不使用用户定义的转换运算符。您需要先手动转换它,然后再将其传递给SetValue().

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

C# 隐式转换“重载”和反射问题 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 未找到接口“JsonSerialized”

    我正进入 状态Interface JsonSerializable not found error在我的网站上 我在用Laravel 5 4 and PHP 7 1 13 JSON module也启用于Cpanel 但我仍然收到以下错误 P
  • 想要使用 C# 将单词的几个字符加粗在 winforms 的树节点中加粗

    我有 搜索文本框 可以在树视图中搜索 我给出的结果很好 但我想让这些部分变得粗体 我在 winform 的 搜索文本框 中输入了这些部分 例如 我输入 Ram 然后它给出 Ram esh TreeNode 类不支持这一点 它的 Text 始
  • 如何从结果集中获取日期

    从 ResultSet 获取 Date 对象时遇到问题 在数据库中它有一个值 例如2014 08 01 从resultSet中获取它后 它有另一个值 2014 08 31 我知道 ResultSet 的 getDate 方法返回 java
  • 在 appengine 中使用较少的数据存储小操作

    我正在使用 python 27 在 appengine 上制作一个基本相册 我编写了以下方法来从与特定 冒险 匹配的数据存储中检索图像详细信息 我使用限制和偏移量进行分页 但效率非常低 浏览 5 个页面 每页 5 张照片 后 我已经使用了
  • 防止数据库中出现重复值 - mysql

    我有一个表存储有关某些事件重复发生的值 例如 事件id 1发生在周一 周三和周五 并且该活动与id 2发生在周一和周三 所以我的表是这样的 id event id day 1 1 Monday 2 1 Wednesday 3 1 Frida
  • 使用 Java 的回文测试器,忽略空格和标点符号

    我已经编写了程序 直到它必须忽略线程中的标点符号和空格 我想知道是否有人可以帮助我编码 我一直在尝试的似乎不起作用 这是我到目前为止所拥有的 import java util Scanner public class PalindromeT
  • 验证失败时禁用保存按钮

    正如您从标题中可以看到的 我要问的问题以前已经被问过很多次了 但是 在阅读了所有这些其他问题之后 我仍然找不到解决我的问题的合适方法 我有一个具有基本验证的模型类 partial class Player IDataErrorInfo pu
  • 布局管理器在 java 中设置此特定布局

    我有这个布局 我需要为作业进行编程 这是我第一次在 GUI 中使用布局管理器 所以我在使布局匹配时遇到问题 我需要你的帮助 我有两个标签为 帐户创建 和 帐户转移 的选项卡 这些都可以 我需要的是将 JLabel 帐户 ID 和第一个文本字
  • 在 Swing 的 JTextPane 中设置选项卡策略

    我希望 JTextPane 在按下 Tab 时插入空格 目前它插入制表符 ASCII 9 无论如何 是否可以自定义 JTextPane 的选项卡策略 除了捕获 选项卡键 事件并自己插入空格似乎是一个 您可以在 JTextPane 上设置 j
  • 如何将R中矩阵的列(累加和)相加?

    我有一个关于将矩阵的列相加的问题 例如 I have a matrix 1 2 3 1 1 3 1 2 2 4 2 I want it to be 1 2 3 1 1 4 5 2 2 6 8 我们可以申请cumsum在每一行上通过循环遍历行
  • 可以将python中的bz2解压到文件而不是内存中

    我曾经使用过在内存中解压和读取文件bz2图书馆 但是 我已通读文档 似乎不能只是简单地解压缩文件 以在文件系统上使用解压缩的数据创建一个全新的文件 而无需内存存储 当然 您可以使用 BZ2Decompressor 逐行读取 然后将其写入文件
  • 如何使用 Traceit 报告堆栈跟踪中的函数输入变量

    我一直在使用以下代码来跟踪程序的执行 import sys import linecache import random def traceit frame event arg if event line lineno frame f li
  • 在 StreamBuilder 中使用 AnimatedList

    我正在使用 firebase 构建一个聊天应用程序 目前将每条消息作为文档存储在 firebase 的集合中 我使用 StreamBuilder 来获取最新消息并显示它们 我想在接收和发送新消息时添加动画 我尝试过使用 Animatedli
  • Pip 没有安装我的个人应用程序的最新依赖项

    您好 我有一个个人 pip 存储库 其中上传了 3 个版本的个人库 版本是 my lib 0 1 0 my lib 1 0 0 my lib 1 0 1 我有另一个应用程序 它使用 my lib 作为依赖项 在setup py文件如 ins
  • Swift 如何获取 collectionView 中的中心单元格并在滚动时调整其大小?

    I have a horizontal collectionView and i would like to manage that when scrolling it the centre cell becomes larger So e
  • 如何在 Linux 上使用 bash 或 python 生成独立的后台进程

    我在 Linux 上有一个长时间运行的 python 脚本 在某些情况下它需要执行命令来停止并重新启动自身 所以 我想要一个外部脚本 bash 或 python 中的 来执行命令来重新启动原始脚本 让我详细说明一下 假设我有original
  • Heroku 意外令牌 ??=

    2021 12 02T02 42 45 888858 00 00 app worker 1 app node modules discord js src rest APIRequest js 33 2021 12 02T02 42 45
  • Qt4:从 QAbstractTableModel 读取默认 mimeData

    默认情况下 QAbstractTableModel类有一个mimeData 返回一个函数QMimeData其数据集为编码的对象QModelIndexList see here 我想以重载的方式解压这些数据dropMimeData 函数 但不
  • 无法编译 cython 生成的 .c 文件

    我对 python 很陌生 对 cython 也很陌生 由于我意识到 cython 对我来说更好 因为它非常快 因此我决定通过创建每个 pyx 文件的 c 文件来切换到 cython 并尝试使用以下各种技术手动编译它们 我使用以下命令从 p
  • C# 隐式转换“重载”和反射问题

    我遇到以下代码问题 可以编译但崩溃 using System using System Collections Generic using System Linq using System Text using System Reflect