Как выдать исключение, не сбрасывая отслеживание стека?

Я бы посмотрел на aria-describedby, чтобы вы могли построить это с учетом доступности.

Атрибут описанный aria не используется только для элементов формы; он также используется для связывания статического текста с виджетами, группами элементов, панелями, областями, которые имеют заголовок, определения и т. д.

blockquote>

Кроме того, используйте role="tooltip", так как это именно то, что вы строите.


В другом месте…

Tooltip text goes here.

Более превосходные доступные примеры всплывающих подсказок можно найти здесь здесь .

21
задан Community 23 May 2017 в 12:26
поделиться

4 ответа

Не уверен, если вы это имеете в виду, но мое предложение в вашем другом вопросе касалось этого.

Если ваш обработчик возвращает логическое значение независимо от того, было ли обработано исключение или нет, вы можете использовать это в предложении catch:

catch (Exception ex) {
  if (!HandleException(ex)) {
    throw;
  }
}
27
ответ дан 29 November 2019 в 06:07
поделиться

Да; Это то, для чего предназначено свойство InnerException.

catch(Exception ex)
{
    throw new YourExceptionClass("message", ex);
}

Это позволит вам добавить собственную логику, а затем выбросить собственный класс исключений. StackTrace экземпляра YourExceptionClass будет изнутри этого блока кода, но InnerException будет исключением, которое вы перехватили, с StackTrace, которое было раньше.

44
ответ дан 29 November 2019 в 06:07
поделиться

Вы не хотите создавать новое исключение с исходной трассировкой стека. Это вводит в заблуждение, поскольку эта трассировка стека не создала новое исключение.

Однако вы можете поместить исходное исключение в новое исключение как «InnerException». Будет ли это делать то, что вы ищете?

5
ответ дан 29 November 2019 в 06:07
поделиться

Are you catching exceptions that you want to then filter more carefully, so you can then change your mind, decide not to handle them and so rethrow them?

If you want to be really careful about this, that's not really a good idea. It's better to never catch the exception in the first place. The reason is that a given try/catch handler should not take the decision to run nested finally blocks for exceptions that it is not expecting to see. For example, if there is a NullReferenceException, it's probably a very bad idea to continue executing any code as it will probably cause another such exception to be thrown. And finally blocks are just code, like any other code. As soon as an exception is caught for the first time, any finally blocks on the stack beneath the try/catch will be executed, by which time it's too late - another exception may be generated, and this means that the original exception is lost.

This implies (in C#) that you have to careful write out a separate catch handler for all the exception types you want to catch. It also implies that you can only filter by exception type. This is sometimes very hard advice to follow.

It should be possible to filter exceptions in other ways, but in C# it is not. However, it is possible in VB.NET, and the BCL itself takes advantage of this by having a small amount of code written in VB.NET so it can filter exceptions in a more convenient way.

Here's a detailed explanation, with a VB.NET code sample, from the CLR team blog.

And here's my two cents.

2
ответ дан 29 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: