EDIT: Wie ich Ihr Problem verstehe, ist das Problem eine reine IDE; Sie mögen nicht, dass VS die durch den Aufruf des MethodInfo
ausgelöste Ausnahme als nicht abgefangen behandelt, wenn dies eindeutig nicht der Fall ist. Sie können lesen, wie dieses Problem hier behoben wird: Why is TargetInvocationException treated as uncaught by the IDE? Es scheint ein Fehler/nach Entwurf zu sein; Aber auf die eine oder andere Weise sind in dieser Antwort gute Workarounds aufgeführt.
Wie ich es sehe, Sie haben ein paar Optionen:
Sie MethodInfo.Invoke
verwenden können, die TargetInvocationException
fangen und seine InnerException
Eigentum inspizieren. Sie müssen die in dieser Antwort erwähnten IDE-Probleme umgehen.
Sie können eine entsprechende Delegate
aus der MethodInfo
erstellen und diese stattdessen aufrufen. Mit dieser Technik wird die geworfene Ausnahme nicht umgebrochen. Darüber hinaus scheint dieser Ansatz scheint gut mit dem Debugger zu spielen; Ich bekomme keine "Uncaught Exception" Pop-ups.
Hier ist ein Beispiel, das beide Ansätze unterstreicht:
class Program
{
static void Main()
{
DelegateApproach();
MethodInfoApproach();
}
static void DelegateApproach()
{
try
{
Action action = (Action)Delegate.CreateDelegate
(typeof(Action), GetMethodInfo());
action();
}
catch (NotImplementedException nie)
{
}
}
static void MethodInfoApproach()
{
try
{
GetMethodInfo().Invoke(null, new object[0]);
}
catch (TargetInvocationException tie)
{
if (tie.InnerException is NotImplementedException)
{
}
}
}
static MethodInfo GetMethodInfo()
{
return typeof(Program)
.GetMethod("TestMethod", BindingFlags.NonPublic | BindingFlags.Static);
}
static void TestMethod()
{
throw new NotImplementedException();
}
}
Kurze und einfache Lösung! –