este código produce "valor de salida".¿Cómo obtener un valor a través de un parámetro out/ref de un método que arroja una excepción?
class P
{
public static void Main()
{
string arg = null;
try
{
Method(out arg);
}
catch
{
}
Console.WriteLine(arg);
}
public static void Method(out string arg)
{
arg = "out value";
throw new Exception();
}
}
pero este no.
class P
{
public static void Main()
{
object[] args = new object[1];
MethodInfo mi = typeof(P).GetMethod("Method");
try
{
mi.Invoke(null, args);
}
catch
{
}
Console.WriteLine(args[0]);
}
public static void Method(out string arg)
{
arg = "out value";
throw new Exception();
}
}
cómo puedo obtener tanto "valor fuera" y un excepción cuando utilizando la reflexión?
Buena pregunta. Pero no deberías confiar en el valor 'out' si arroja un método. –
+1, gran pregunta, por supuesto que tuve que intentarlo :) Especulo que su variable original no pasa a la función invocada, obtiene una copia, y esa copia se refleja de nuevo en el original cuando tiene éxito finalización (que, por supuesto, no sucede). – slugster
@slugster: su especulación es correcta. Sospecho que no hay ninguna manera de hacer eso con la reflexión. –