Looking for c# Keywords? Try Ask4Keywords

C# Language Использование объекта исключения


пример

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

Exception ex = new Exception();

// constructor with an overload that takes a message string
Exception ex = new Exception("Error message"); 

Затем вы можете использовать ключевое слово throw для повышения исключения:

try
{
    throw new Exception("Error");
}
catch (Exception ex)
{
    Console.Write(ex.Message); // Logs 'Error' to the output window
} 

Примечание. Если вы выбрали новое исключение внутри блока catch, убедитесь, что исходное исключение передано как «внутреннее исключение», например

void DoSomething() 
{
    int b=1; int c=5;
    try
    {
        var a = 1; 
        b = a - 1;
        c = a / b;
        a = a / c;
    }        
    catch (DivideByZeroException dEx) when (b==0)
    {
        // we're throwing the same kind of exception
        throw new DivideByZeroException("Cannot divide by b because it is zero", dEx);
    }
    catch (DivideByZeroException dEx) when (c==0)
    {
        // we're throwing the same kind of exception
        throw new DivideByZeroException("Cannot divide by c because it is zero", dEx);
    }
}

void Main()
{    
    try
    {
        DoSomething();
    }
    catch (Exception ex)
    {
        // Logs full error information (incl. inner exception)
        Console.Write(ex.ToString()); 
    }    
}

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

Он покажет что-то вроде:

System.DivideByZeroException: не может делить на b, потому что он равен нулю -> System.DivideByZeroException: Попытка деления на ноль.
в UserQuery.g__DoSomething0_0 () в C: [...] \ LINQPadQuery.cs: строка 36
--- Конец внутренней проверки стека исключений ---
в UserQuery.g__DoSomething0_0 () в C: [...] \ LINQPadQuery.cs: строка 42
в UserQuery.Main () в C: [...] \ LINQPadQuery.cs: строка 55

Если вы попробуете этот пример в LinqPad, вы заметите, что номера строк не очень значимы (они не всегда помогают вам). Но передача полезного текста ошибки, как было предложено выше, часто значительно сокращает время отслеживания местоположения ошибки, которая в этом примере явно соответствует линии

c = a / b;

в функции DoSomething() .

Попробуйте в .NET Fiddle