Не хотите генерировать исключение, я должен вернуть пользовательский класс, который содержит массив bool и string? - PullRequest
0 голосов
/ 21 декабря 2009

В вашем коде есть определенные области, в которых вы не хотите останавливать выполнение программы, например, во время проверки в магазине электронной торговли.

Я думал о создании специального типа 'return', который выглядит следующим образом:

public bool SpecialReturn
{
    public bool IsSucess {get;set;}
    public List Messages {get;set;}
}

Я мог бы поместить туда enum, чтобы вернуть ReturnType и т. Д., Если бы захотел.

Скажем так, я бы тогда вызвал мой метод процесса CheckOut и возвратил его, чтобы я мог затем обработать ошибку более аккуратно.

это хорошая практика?

Ответы [ 5 ]

3 голосов
/ 21 декабря 2009

Выполнение программы не должно останавливаться при нажатии на исключение.

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

Конечно, всегда есть ситуации, когда возвращение какого-либо объекта статуса может быть лучшей идеей, чем создание / перехват исключений, и ваша ситуация может быть одной из таких, но без дополнительной информации трудно сказать.

2 голосов
/ 21 декабря 2009

Вы пришли из чудесного мира C, не так ли?

Да, вы можете сделать это. но это не было бы полезно ... ваш код все еще можно выкинуть из ClassLibrery и обрабатывая коды ошибок, хорошо отстой ...

создание исключений не останавливает программу, они просто сообщают верхнему уровню о неожиданной ошибке ... try ... catch ...

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

1 голос
/ 21 декабря 2009

Если функция может завершиться успешно и вернуть результат, или потерпеть неудачу и не вернуть результат, вы можете использовать тот же шаблон, что и Microsoft в ряде мест. TryParse - идеальный пример.

int result;
if ( Int32.TryParse("MyStringMayFail", out result) )
{
 // Succeeded result is usable
}
else
{
 // failed result is undefined and should not be trusted.
}

Фактический тип возврата метода указывает на успех или неудачу, параметризованная переменная содержит «результат» любой операции, которую может выполнять функция. Этот стиль кодирования позволяет конечному пользователю функции напрямую кодировать успех или неудачу функции.

Создать собственную реализацию методов TryParse очень просто, они обычно сочетаются с Parse методами, которые выдают исключения, если что-то не получается во время обработки.

1 голос
/ 21 декабря 2009

это хорошая практика?

Я бы сказал НЕ.

Создайте свой собственный подкласс Исключения, добавьте свои собственные свойства по мере необходимости (чтобы сообщить контекстную информацию, соответствующую вашим потребностям) и выбросьте.

Если вы используете Visual Studio, для этого есть хороший фрагмент кода, который называется Исключением.

[Serializable]
public class MyCustomException : Exception
{
    public MyCustomException(string myMessage)
    {
        MyMessage = myMessage;
    }

    protected MyCustomException(SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
    }

    public string MyMessage { get; private set; }
}

//...

throw new MyCustomException("Hello, world!");
0 голосов
/ 21 декабря 2009

Если на самом деле это «исключительный» случай, а не просто допустимый сбой, вполне разумно выдать исключение. В вашем случае вы можете обработать исключение и продолжить выполнение как можно лучше.

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

Теперь, если сбой произошел из-за ошибки авторизации кредитной карты (имеется в виду неверный номер карты, сбой соединения потребует исключения) или что-то в этом роде Я бы использовал коды ошибок и сообщения об ошибках вместо исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...