questo codice emette "valore in uscita".Come ottenere un valore attraverso un parametro out/ref da un metodo che genera un'eccezione?
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();
}
}
ma questo 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();
}
}
come posso ottenere sia "value out" e un un'eccezione quando utilizzando la riflessione?
Bella domanda. Ma non si dovrebbe fare affidamento sul valore 'out' se un metodo viene lanciato. –
+1, ottima domanda, ovviamente ho dovuto provarlo :) Vorrei ipotizzare che la tua variabile originale non venga passata alla funzione invocata, ottiene una copia e quella copia viene riflessa nell'originale in caso di successo completamento (che ovviamente non accade). – slugster
@slugster: la tua speculazione è corretta. Sospetto che non ci sia modo di farlo con la riflessione. –