powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / использование конструкции try catch в качестве обычного ветвления кода
14 сообщений из 14, страница 1 из 1
использование конструкции try catch в качестве обычного ветвления кода
    #39768842
yet another noob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! А это нормальная практика в программировании на C# - использовать обработку исключений в качестве конструкции обычного "штатного" ветвления кода ?

Пример с гитхаба


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
using BusinessLayer;
using System;

namespace CslaFastStart
{
  class Program
  {
    static void Main(string[] args)
    {
      // ... code to create and insert a person ...

      // ... code to fetch and update a person ...

      Console.WriteLine();
      Console.WriteLine("Deleting existing person");
      Csla.DataPortal.Delete<PersonEdit>(person.Id);
      try
      {
        person = Csla.DataPortal.Fetch<PersonEdit>(person.Id);
        Console.WriteLine("Person NOT deleted");
      }
      catch
      {
        Console.WriteLine("Person successfully deleted");
      }

      Console.ReadKey();
    }
  }
}


...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768850
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yet another noob,

try_catch по сути своей есть ветвление, в конкретно вашем примере, как по мне, в catch обычно обрабатывают неудачу, а "удачное выполнение", выглядит как минимум странно
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768852
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yet another noobДобрый день! А это нормальная практика в программировании на C# - использовать обработку исключений в качестве конструкции обычного "штатного" ветвления кода ?

Пример с гитхаба


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
using BusinessLayer;
using System;

namespace CslaFastStart
{
  class Program
  {
    static void Main(string[] args)
    {
      // ... code to create and insert a person ...

      // ... code to fetch and update a person ...

      Console.WriteLine();
      Console.WriteLine("Deleting existing person");
      Csla.DataPortal.Delete<PersonEdit>(person.Id);
      try
      {
        person = Csla.DataPortal.Fetch<PersonEdit>(person.Id);
        Console.WriteLine("Person NOT deleted");
      }
      catch
      {
        Console.WriteLine("Person successfully deleted");
      }

      Console.ReadKey();
    }
  }
}




Да там же понятно по коду, почему так сделано.

Во первых это типа быстро накиданный пример работы с CLSA.
Во вторых внутри Fetch используется PersonDal:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
namespace DataAccessLayer
{
  public class PersonDal
  {
    // this is our in-memory database
    private static List<PersonDto> _list = new List<PersonDto>();

    public PersonDto Create()
    {
      return new PersonDto { Id = -1 };
    }

    public PersonDto GetPerson(int id)
    {
      var entity = _list.FirstOrDefault(_ => _.Id == id);
      if (entity == null)
        throw new Exception("Index not found");
      return entity;
    }


И автор зачем-то решил кидать исключение на этом уровне, вместо того, чтобы вернуть null.

Соответсвенно, если возникло исключение в GetPerson после Delete, то реально "Person successfully deleted"


Моё мнение: не надо так делать.
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768919
yet another noob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо!

а что так мало отвечающих? ещё мнения будут?
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768921
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, выходной.
Во-вторых, срачи "исключения vs статус" уже порядком всем надоели, совсем недавно один из них был и уже все свои мнения высказали
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768941
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yet another noobА это нормальная практика в программировании на C# - использовать обработку исключений в качестве конструкции обычного "штатного" ветвления кода ?

Нет не нормально. Как половник или лопату вместо ложки.
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768943
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Лично мне порядком надоели видеть в живых проектах вот эти "BusinessLayer", "BusinessLogic"... :)
Точнее, в учебных примерах, для понимания вводится DataLayer, BusinessLayer, а потом берут и тащат в свои проекты, не задумываясь.
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768944
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proсовсем недавно один из них был и уже все свои мнения высказаливот же он Исключения vs коды возвратов
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39768966
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вам же ответили, что в рамках примера, данный код нормальный. как пример.
то есть некорректное поведение, неправильно будет в том случае, если удаленный объект можно получить, а корректным, если при получении удаленного объекта вы получите исключение. Именно это и отражает данный пример. Что тут еще объяснять? в реальной жизни такой сценарий маловероятен.
но это не значит, что возбуждение исключения для немедленного возврата управления в блок Catch в стеке вызовов это неправильно.
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39769003
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код адское гамно. За такое в реальном проекте надо голову отрывать и в жоппу засовывать.
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39769018
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yet another noobспасибо!

а что так мало отвечающих? ещё мнения будут?
Код негодный
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39769019
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилyet another noobспасибо!

а что так мало отвечающих? ещё мнения будут?
Код негодный
И противный :)
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39769864
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал рассказ про препарирование какого-то графического редактора, в котором возврат значений из функций производился через коды исключений. Автор рассказа описывал редактор как безысходно тормозное говно.

Обработка исключений - операция более медленная, чем условный переход, фу ее использовать иначе как аварийное завершение исполнения кода куска.
...
Рейтинг: 0 / 0
использование конструкции try catch в качестве обычного ветвления кода
    #39769879
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Названия Исключительная ситуация вполне достаточно)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / использование конструкции try catch в качестве обычного ветвления кода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]