Какой хороший способ для DLL С# вернуть ошибку вызывающему приложению?

Я пишу dll, которая является оболочкой для базы данных доступа. и я довольно новичок в С# в целом, так как мой опыт связан с веб-разработкой LAMP с Perl, я не уверен, что это хороший способ вернуть ошибку вызывающему приложению, если они передают неверные параметры моим функциям или что-то еще .

На данный момент я понятия не имею, за исключением того, что, возможно, делаю какой-то msgbox или выбрасываю некоторые исключения, но я не знаю, с чего начать поиск. Любая помощь или ресурсы будут более чем полезны :)

спасибо~


person melaos    schedule 05.05.2009    source источник
comment
Лучшей практикой было бы генерировать исключение и обрабатывать его в хост-приложении.   -  person Daniel    schedule 05.05.2009


Ответы (6)


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

Сборки библиотек .Net обычно создают исключения для хост-приложения, поэтому я бы рассмотрел именно этот подход.

public static class LibraryClass
{
    public static void DoSomething(int positiveInteger)
    {
        if (positiveInteger < 0)
        {
            throw new ArgumentException("Expected a positive number", "positiveInteger");
        }
    }
}

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

try
{
    LibraryClass.DoSomething(-3);
}
catch(ArgumentException argExc)
{
    MessageBox.Show("An Error occurred: " + argExc.ToString());
}
person Scott Ferguson    schedule 05.05.2009
comment
Я ненавижу диалоговые окна, привязанные к библиотекам. - person ojblass; 05.05.2009
comment
если я добавлю файл dll, динамически используя отражение, эта ошибка хочет получить бросок, и она дает мне ошибку как исключение, необработанное пользователем, любые идеи здесь мой вопрос stackoverflow.com/questions/38816233/ - person Aylian Craspa; 07.08.2016

Неправильные параметры обычно обрабатываются путем создания исключения ArgumentException или одного из его подклассов.

person Brian Rasmussen    schedule 05.05.2009

Вы хотите создать исключение.

Видеть

http://msdn.microsoft.com/en-us/library/ms229007.aspx

для наиболее распространенных исключений платформы, таких как ArgumentException и InvalidOperationException. Смотрите также

http://msdn.microsoft.com/en-us/library/ms229030.aspx

person Brian    schedule 05.05.2009

Ознакомьтесь с рекомендациями по проектированию для разработчиков библиотек классов: Вызов и обработка ошибок Рекомендации

person Aaron Fischer    schedule 05.05.2009
comment
Эта ссылка относится к 2003 году, она немного устарела, поскольку выступает за (а не против) ApplicationException, но остальные советы по-прежнему кажутся своевременными. - person Brian; 05.05.2009

Как правило, библиотеки DLL не должны создавать какие-либо элементы пользовательского интерфейса для сообщения об ошибке. Вы можете выбрасывать (то же самое, что и поднять) множество разных видов исключений или создавать свои собственные, а вызывающий код (клиент) может перехватывать и сообщать пользователю.

public void MyDLLFunction()
{
    try
    {
        //some interesting code that may
        //cause an error here
    }
    catch (Exception ex)
    {
        // do some logging, handle the error etc.
        // if you can't handle the error then throw to
        // the calling code
        throw;
        //not throw ex; - that resets the call stack
    }
}
person Gary.Ray    schedule 05.05.2009

бросить новое исключение?

person Paulo    schedule 05.05.2009