我正在学习用C#编写自定义类型转换,我有一个问题,我无法通过Google/MSDN /早期发布的SO项目解决.
通常,缩小数字类型的C#程序通过未经检查的显式转换来执行此操作,例如:
int i = 256;
byte b = (byte)i; // b == 0
Run Code Online (Sandbox Code Playgroud)
但是,以下将给出溢出异常:
byte b = checked((byte)i);
Run Code Online (Sandbox Code Playgroud)
我的问题如下:在自定义类型转换中可实现的checked/unchecked关键字的行为,例如:
class Foo {
public static explicit operator int(Foo bar) {
if (checked)
throw someEception
else
return some Foo to int conversion
}
}
Run Code Online (Sandbox Code Playgroud)
当然,上面的代码不是答案,但有人知道这样的事情是否可行?
checked是一个编译时间的事情.也就是说,它的唯一影响将是直接由checked语句包围的代码块,而不是该块中调用的方法.因此,在运行时不会有一个checked和unchecked上下文,您可能希望根据它调整函数的行为.
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |