Ответ 1
РЕДАКТИРОВАТЬ: Насколько я понимаю вашу проблему, проблема - это только IDE; вам не нравится, что VS обрабатывает исключение, вызванное вызовом MethodInfo
как неотображенное, когда это явно не так. Вы можете прочитать о том, как решить эту проблему здесь: Почему TargetInvocationException рассматривается как непроверенный с помощью IDE? Кажется, это ошибка/по дизайну; но так или иначе, достойные обходные пути перечислены в этом ответе.
Как я вижу, у вас есть несколько вариантов:
-
Вы можете использовать
MethodInfo.Invoke
, пойматьTargetInvocationException
и проверить его свойствоInnerException
. Вам придется обходить проблемы IDE, как указано в этом ответе. -
Вы можете создать соответствующий
Delegate
изMethodInfo
и вместо этого вызвать это. С помощью этой техники исключенное исключение не будет обернуто. Кроме того, этот подход, похоже, хорошо работает с отладчиком; Я не получаю всплывающие окна "Uncaught exception".
Вот пример, который подчеркивает оба подхода:
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();
}
}