Особенность тишины c Исключение - PullRequest
2 голосов
/ 16 июня 2020

У меня много throw new NotImplementedExceptions() на протяжении всего моего приложения. Сейчас я хочу заставить их замолчать и вместо этого показать настраиваемый диалог сообщений.

Для их обнаружения я использую:

AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
     if(eventArgs.Exception is NotImplementedException) {
        return;
     }
}

Но проблема в том, что исключение все еще генерируется.

Как я могу заглушить бросок, когда я перехватываю этот тип исключения в этом фрагменте кода?

1 Ответ

1 голос
/ 16 июня 2020

Похоже, что вы хотите сделать что-то более приятное, чем взрыв, когда вызывается метод, который вы не реализовали. Я не верю, что это возможно с использованием AppDomain.FirstChanceException или связанного с ним UnhandledException. Здесь есть хороший ответ , в котором немного говорится о том, почему просто подавление исключений нежелательно.

Вместо этого вы могли бы использовать что-то, кроме создания исключения, чтобы пометить методы как не реализованные, например вызов помощник, который отображает ваше сообщение, если вы еще что-то не реализовали. Вы можете использовать прагмы #if или ConditionalAttribute, чтобы переключиться на фактическое создание исключений в сборках без DEBUG, если это желательно. В любом случае использование помощников для генерации исключений не является редкостью (см., Например, ThrowHelper в BCL или Throw в одном из моих собственных проектов), поскольку есть некоторые Преимущества, позволяющие избежать throw s.

Это будет выглядеть так:

public void UnImplementedMethod()
{
  // rather than "throw new NotImplementedException("some message")"
  MyHelper.NotImplemented("some message");
}

// .... 

static class MyHelper
{
  [Conditional("DEBUG")]  
  public static void NotImplemented(string msg)
  {
#if DEBUG // can use whatever configuration parameter
      MessageBox.Show("Not Implemented: "+ msg);
#else
      throw new NotImplementedException(msg);
#endif
  }
}

Вы можете использовать общие параметры c для обработки нереализованных методов, которые имеют ненулевой возврат, хотя у вас есть чтобы решить, что на самом деле вернуть, если вы не генерируете исключение. С помощью этого шаблона вы можете делать все, что захотите, и при этом легко находить места, которые не были реализованы.

...