Estoy usando IL para lanzar un Int32 y atraparlo. Esto es solo por curiosidad, no estoy tratando de lograr nada, así que por favor no me digan lanzar una excepción en lugar de int.cómo atrapar un 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
Esto no funciona, me sale la cadena "en la captura de objetos", pero cuando trato de desempacar consigo un System.InvalidCastException: especificar la conversión no es válida. ¿Cómo puedo obtener el valor de lo que se arrojó?
Escribir en C# primero y luego mira el IL? – CarneyCode
no puedo escribirlo en C#, porque C# como idioma no permite lanzar int –
Como el 0 local es del tipo System.Exception, no me sorprende que no pueda destrabar esto como un int. –