我正在使用IL來拋出Int32並捕獲它。這只是出於好奇心,我不想實現任何目標,所以請不要告訴我拋出異常而不是int。如何捕捉一個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
這是不行的,我得到的字符串「在對象捕捉」但是當我嘗試拆箱,我得到一個System.InvalidCastException:指定的轉換無效。 我怎樣才能得到所拋出的價值?
用C#編寫它,然後看看IL? – CarneyCode 2011-04-28 05:30:59
不能寫在C#中,因爲C#作爲一種語言不允許拋出int – 2011-04-28 05:33:06
因爲本地0是System.Exception類型的,所以不會讓我感到意外的是,您不能將其作爲int取消裝箱。 – 2011-04-28 06:06:06