.net 如何捕捉整数

.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

我正在使用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:  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;
}