Как заставить использование попытки/уловить конкретные методы

StackOverflow https://stackoverflow.com/questions/20354037

Вопрос

Я создаю «общую» библиотеку, которая будет использоваться в качестве ссылки в различных проектах решений другими членами команды. Методы обычно void функции без фактических возвращаемых данных.

Я ищу зачем заставить использование этих методов в Try...Catch Блок другими. Мне нужно убедиться, что ошибки обрабатываются должным образом. Хотя я полагаюсь на логический тип возврата, но это не позволит мне вернуть сообщение об ошибке, поэтому мой единственный вариант - бросить Exception.

Если правильное воздействие невозможно, как я могу сделать атрибут, который появляется при компиляции, чтобы предупредить разработчика о требованиях Try/Catch? (своего рода Obsolete атрибут).

Есть ли другие лучшие подходы?

РЕДАКТИРОВАТЬ:

Вот мой полный сценарий:

У меня есть метод кода, который вызывает веб -службу для удаленного обновления значения. Обновление довольно важно. Метод он работает нормально, но что, если веб -сервис не может быть достижимы? Вызов не возвращает никакого значения.

Это было полезно?

Решение

Поместив что -то в try/catch Блок не делает его «правильно обработанным» - фактически, в подавляющее большинство Из случаев правильный способ обработки исключения состоит в том, чтобы позволить ему подняться на следующий уровень. Предостережение: try/finally гораздо чаще, чтобы учесть очистку ресурсов, но даже более распространено, чем это using.

Вы не можете применять », и вы должны правильно его использовать» в коде; это подразумевается в любом API, и вы просто будете вызывать раздражение и раздражение и заставлять людей быть неподходящими и бесполезными стилями кодирования, при этом предоставив вам Полностью искусственный и неверный Чувство кода правильное.

Если вы хотите быть уверенным, что код функционирует правильно: проверьте его.

Нет никаких атрибутов, которые вы можете использовать для этого сценария. Вы, вероятно, можете создать правило FXCOP или аналогичное, но по причинам выше: я не рекомендую его.

Другие советы

Я бы на самом деле не сделал бы этого, но в качестве забавного решения заявленной проблемы вы могли бы построить свой собственный тип исключения: успешно. Затем вы бросаете это исключение в конце своего метода, чтобы указать успех. Это делает метод в значительной степени непригодным для использования без какой -либо формы Try/Catch. Но снова: Не делай этого.

Вы можете вернуть пользовательский класс результатов:

public class Result
{
    public bool Okay { get; set; }
    public string Error { get; set; }
}

Затем:

var result = AttemptSomething();

if (!result.Okay)
{
    Console.WriteLine(result.Error);
}

Или, может быть, вернуться string:

var error = AttemptSomething();

if (!String.IsNullOrEmpty(error))
{
    Console.WriteLine(error);
}

Или иметь ошибку в качестве вне:

string error;
if (!AttemptSomething(out error))
{
    Console.WriteLine(error);
}

Или возврат Exception но не бросать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top