Dieser Code gibt "out value" aus.Wie erhält man einen Wert über einen out/ref-Parameter von einer Methode, die eine Ausnahme auslöst?
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();
}
}
aber dieses tut nicht.
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();
}
}
wie kann ich sowohl "out-Wert" und eine Ausnahme wenn Reflexion mit?
Schöne Frage. Aber Sie sollten sich nicht auf den "out" -Wert verlassen, wenn eine Methode auslöst. –
+1, gute Frage, natürlich musste ich es versuchen :) Ich würde spekulieren, dass Ihre ursprüngliche Variable nicht in die aufgerufene Funktion übergeben wird, es erhält eine Kopie, und diese Kopie wird bei erfolgreicher Umsetzung ins Original zurückreflektiert Fertigstellung (was natürlich nicht passiert). – slugster
@Slugster: Ihre Spekulation ist richtig. Ich vermute, dass es keine Möglichkeit gibt, das durch Nachdenken zu tun. –