.net 如何捕捉整数
我正在使用IL抛出一个Int32并捕获它。这只是出于好奇,我不想实现任何目标,所以请不要告诉我抛出异常而不是int.net 如何捕捉整数,.net,exception-handling,il,.net,Exception Handling,Il,我正在使用IL抛出一个Int32并捕获它。这只是出于好奇,我不想实现任何目标,所以请不要告诉我抛出异常而不是int .method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 40 (0x28) .maxstack 2 .locals init (object V_0, int32 V_1) IL_0000: n
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 40 (0x28)
.maxstack 2
.locals init (object V_0,
int32 V_1)
IL_0000: nop
.try
{
IL_0001: nop
IL_0002: ldsfld int32 ConsoleApplication3.Program::i
IL_0007: throw
} // end .try
catch [mscorlib]System.Object
{
IL_0008: stloc.0
IL_0009: nop
IL_000a: ldstr "In Object catch"
IL_000f: call void [mscorlib]System.Console::WriteLine(string)
IL_0014: nop
IL_0015: ldloc.0
IL_0016: unbox.any [mscorlib]System.Int32
IL_001b: stloc.1
IL_001c: ldloc.1
IL_001d: call void [mscorlib]System.Console::WriteLine(int32)
IL_0022: nop
IL_0023: nop
IL_0024: leave.s IL_0026
} // end handler
IL_0026: nop
IL_0027: ret
} // end of method Program::Main
这不起作用,我得到字符串“In Object catch”,但当我尝试取消装箱时,我得到一个System.InvalidCastException:指定的强制转换无效。
我如何获得抛出的内容的值
在CLR的2.0版中,当
引发不符合CLS的异常,
CLR自动构造一个
实例
RuntimeWrappedException类和
初始化其私有字段以引用
对实际存在的对象
扔。实际上,CLR现在将
所有不符合CLS的例外情况都进入
符合CLS的例外情况
先用C#写,然后再看IL?不能用C#写,因为C#作为一种语言不允许抛出int,因为本地0是System类型。例外情况是,你不能将其作为int取消装箱并不奇怪。是吗?我的伊尔福有那么糟糕吗?.locals指令说这是个例外。。。另外,另一个局部变量.1声明为bool.Changed.locals init(对象V_0,bool V_1)仍然是来自MSDN:RuntimeWrappedException类RuntimeCompatibilityAttribute类的相同结果
try
{
// ...
}
catch (RuntimeWrappedException e)
{
int a = (int)e.WrappedException;
}