我正在学习用 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 中调用的方法。因此,在运行时不会有 checked
和 unchecked
上下文,您可能希望根据它调整函数的行为。
关于C# - 使用选中/未选中运算符的自定义显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724128/