Без опису

mvavilov 13b6ad460d Обновить 'readme.md' 1 день тому
oap_labs e6cfe55aa7 maks 2 тижнів тому
.gitignore 91dacc4115 maksim 2 тижнів тому
oap_labs.sln 91dacc4115 maksim 2 тижнів тому
readme.md 13b6ad460d Обновить 'readme.md' 1 день тому

readme.md

"Конспект лекции "Исключения"

1) Деление на ноль без обработки исключения

int x = 5;
int y = x / 0;
Console.WriteLine($"Результат: {y}");
Console.WriteLine("Конец программы");
Console.Read();
Unhandled exception. System.DivideByZeroException: Attempted to divide by zero.
   at Program.<Main>$(String[] args) in /home/kei/RiderProjects/tryCatch/Program.cs:line 2

Process finished with exit code 134.

2) Деление на ноль с обработкой исключения

try
{
    int x = 5;
    int y = x / 0;
    Console.WriteLine($"Результат: {y}");
}
catch
{
    Console.WriteLine("Возникло исключение!");
}
finally
{
    Console.WriteLine("Блок finally");
}
Console.WriteLine("Конец программы");
Console.Read();
Возникло исключение!
Блок finally
Конец программы

3) Обработка исключения с фильтром

int x = 1;
int y = 0;

try
{
    int result = x / y;
}
catch (DivideByZeroException) when (y == 0 && x == 0)
{
    Console.WriteLine("y не должен быть равен 0");
}
catch (DivideByZeroException ex)
{
    Console.WriteLine(ex.Message);
}
Attempted to divide by zero.

4) Обработка исключения с использованием Exception

try
{
    int x = 5;
    int y = x / 0;
    Console.WriteLine($"Результат: {y}");
}
catch (Exception ex)
{
    Console.WriteLine($"Исключение: {ex.Message}");
    Console.WriteLine($"Метод: {ex.TargetSite}");
    Console.WriteLine($"Трассировка стека: {ex.StackTrace}");
}
Console.Read();
Исключение: Attempted to divide by zero.
Метод: Void <Main>$(System.String[])
Трассировка стека:    at Program.<Main>$(String[] args) in C:\Users\Admin\labs\oap_labs\oap_labs\Program.cs:line 4

5) Cоздание класса исключения

class PersonException : Exception
{
    public int Value { get; }
    public PersonException(string message, int val) : base(message)
    {
        Value = val;
    }
}

class Person
{
    public string Name { get; set; }
    private int age;
    public int Age
    {
        get { return age; }
        set
        {
            if (value < 18)
                throw new PersonException("Лицам до 18 регистрация запрещена", value);
            else
                age = value;
        }
    }
}

try
{
    Person p = new Person { Name = "Tom", Age = 13 };
}
catch (PersonException ex)
{
    Console.WriteLine($"Ошибка: {ex.Message}");
    Console.WriteLine($"Некорректное значение: {ex.Value}");
}
Console.Read();
Ошибка: Лицам до 18 регистрация запрещена
Некорректное значение: 13

6) Поиск блока catch в стеке вызовов

try
{
    TestClass.Method1();
}
catch (DivideByZeroException ex)
{
    Console.WriteLine($"Catch в Main: {ex.Message}");
}
finally
{
    Console.WriteLine("Блок finally в Main");
}
Console.WriteLine("Конец метода Main");
Console.Read();

class TestClass
{
    public static void Method1()
    {
        try
        {
            Method2();
        }
        catch (IndexOutOfRangeException ex)
        {
            Console.WriteLine($"Catch в Method1: {ex.Message}");
        }
        finally
        {
            Console.WriteLine("Блок finally в Method1");
        }
        Console.WriteLine("Конец метода Method1");
    }
    static void Method2()
    {
        try
        {
            int x = 8;
            int y = x / 0;
        }
        finally
        {
            Console.WriteLine("Блок finally в Method2");
        }
        Console.WriteLine("Конец метода Method2");
    }
}
Блок finally в Method2
Блок finally в Method1
Catch в Main: Attempted to divide by zero.
Блок finally в Main
Конец метода Main

7) Генерация исключения с помощью throw

try
{
    Console.Write("Введите строку: ");
    string message = Console.ReadLine();
    if (message.Length > 6)
    {
        throw new Exception("Длина строки больше 6 символов");
    }
}
catch (Exception e)
{
    Console.WriteLine($"Ошибка: {e.Message}");
}
Console.Read();
Введите строку: HelloWorld
Ошибка: Длина строки больше 6 символов

8) Использование оператора условного null

class User
{
    public Phone Phone { get; set; }
}

class Phone
{
    public Company Company { get; set; }
}

class Company
{
    public string Name { get; set; }
}

User user = new User();
string companyName = user?.Phone?.Company?.Name ?? "не установлено";
Console.WriteLine(companyName);
не установлено