C# - 使用选中/未选中运算符的自定义显式转换

标签 c#

我正在学习用 C# 编写自定义类型转换,但我有一个问题无法通过 Google/MSDN/之前发布的 SO 项目来解决。

通常,缩小数字类型的 C# 程序通过未经检查的显式转换来实现,例如:

int i = 256;
byte b = (byte)i; // b == 0

但是,下面会给出溢出异常:

byte b = checked((byte)i);

我的问题如下:checked/unchecked 关键字的行为是否可以在自定义类型转换中实现,例如:

class Foo {
  public static explicit operator int(Foo bar) {
    if (checked)
      throw someEception
    else
      return some Foo to int conversion
  }
}

当然,上面的代码不是答案,但是有人知道这样的事情是否可行吗?

最佳答案

checked 是编译时的事情。也就是说,它的唯一作用是直接checked 语句包围的代码块,而不是该 block 中调用的方法。因此,在运行时不会有 checkedunchecked 上下文,您可能希望根据它调整函数的行为。

关于C# - 使用选中/未选中运算符的自定义显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724128/

相关文章:

c# - 如何跟踪数据库中的更改

c# - IDynamicMetaObjectProvider 使用文字名称设置属性

c# - 将 KeyDown 键转换为一个字符串 C#

c# - 创建 NHibernate Queryover 以获取两个字段乘积的总和

c# - 在什么情况下 GetType() 方法将返回接口(interface)的类型

C# 给带参数的对象属性赋值

c# - 将 NULL 传递给构造函数

c# - 读取单色位图像素颜色

c# - 使用 Mono 设置桌面墙纸

C# 从 Windows 服务中保存 Exchange .EML 文件