Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538

Обертка над исключением - Сделать так, чтобы блоки try/catch не дублировались

13.08.2014, 12:41. Показов 1294. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть примерно такой код:
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
31
32
33
34
35
36
37
38
39
for (...) {
    if (...) {
        if (...) {
            double d;
            try {
                d = (double)someobject;
            } catch (System.InvalidCastException) {
                что-то пишем в лог
            }
            делаем что-то еще, если исключение не брошено, используя d
        } else {
            int d;
            try {
                d = (int)someobject;
            } catch (System.InvalidCastException) {
                что-то пишем в лог
            }
            делаем что-то еще, если исключение не брошено, используя d
        }
    } else {
        if (...) {
            bool d;
            try {
                d = (bool)someobject;
            } catch (System.InvalidCastException) {
                что-то пишем в лог
            }
            делаем что-то еще, если исключение не брошено, используя d
        } else {
            string d;
            try {
                d = (string)someobject;
            } catch (System.InvalidCastException) {
                что-то пишем в лог
            }
            делаем что-то еще, если исключение не брошено, используя d
        }
    }
}
Как сделать так, чтобы блоки try/catch не дублировались? Вообще хочу просто уведомлять пользователя о том, что какой-то объект имеет не тот тип, который ожидает программа.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.08.2014, 12:41
Ответы с готовыми решениями:

Как сделать так, что бы в результате не дублировались одинаковые элементы?
#include <iostream> #include <string> #include <set> using namespace std; int main() { srand(time(NULL)); int a; ...

Что не так в коде(блоки try catch)
using System; using System.Collections.Generic; using System.Linq; using System.Text; class CheckedBlocks { static void...

Как сделать так чтобы фон оставался на месте, а прокручивались блоки сайта
Пытаюсь сделать так чтобы фон оставался на месте и не повторялся, а двигались только (как бы это сказать?) блоки внутри сайта, как это...

13
33 / 31 / 7
Регистрация: 16.08.2012
Сообщений: 126
13.08.2014, 13:17
проверить тип "someobject"
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,100
13.08.2014, 13:18
Цитата Сообщение от Kukurudza Посмотреть сообщение
Как сделать так, чтобы блоки try/catch не дублировались?
Заключите весь код в один блок try/catch
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
for (...) {
            try {
    if (...) {
        if (...) {
            double d;
                d = (double)someobject;
            делаем что-то еще, если исключение не брошено, используя d
        } else {
            int d;
                d = (int)someobject;
            делаем что-то еще, если исключение не брошено, используя d
        }
    } else {
        if (...) {
            bool d;
                d = (bool)someobject;
            делаем что-то еще, если исключение не брошено, используя d
        } else {
            string d;
 
                d = (string)someobject;
            делаем что-то еще, если исключение не брошено, используя d
        }
    }
            } catch (System.InvalidCastException) {
                что-то пишем в лог
            }
 
}
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
13.08.2014, 13:22  [ТС]
nedel, можно, но в
C#
1
2
3
catch (System.InvalidCastException) {
    что-то пишем в лог
}
я хочу передавать какие-то данные. например, локальную переменную d. а она везде имеет разный тип
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,100
13.08.2014, 13:32
Цитата Сообщение от Kukurudza Посмотреть сообщение
например, локальную переменную d. а она везде имеет разный тип
ведь у вас есть someobject, у которого есть ToString() - этого обычно хватает для лога
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
13.08.2014, 13:36
В этом коде применять исключения вообще не нужно
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
13.08.2014, 13:40  [ТС]
как то так:
C#
1
2
3
4
5
6
7
double d;
if (Object.ReferenceEquals(d.GetType(), someobject.GetType())) {
    d = (double)someobject;
    делаем что-то еще, используя d
} else {
    что-то пишем в лог
}
?
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,100
13.08.2014, 13:56
нет
C#
1
2
3
4
5
6
7
double d;
if (someobject is double) {
    d = (double)someobject;
    делаем что-то еще, используя d
} else {
    что-то пишем в лог
}
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
13.08.2014, 14:07  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
StringBuilder sb = new StringBuilder();
 
void log(Type t) {
    sb.Append("Strange type. Expected type = ");
    sb.Append(t);
}
 
void f() {
    double d;
    if (someobject is double) {
        d = (double)someobject;
        делаем что-то еще, используя d
    } else {
        log(d.GetType());
    }
}
ok?
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
13.08.2014, 14:12
C#
1
2
3
4
swith(someobject.GetType().ToString())
{
  case "System.Double": ...
}
а откуда у вас взялся someobject? есть полиморфизм и шаблонные классы-методы. обычно этого достаточно длля подобных случаев.
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,100
13.08.2014, 14:17
log(d.GetType()); - этого вам компилятор не пропустит, напишите log(typeof(decimal));

странный способ писать лог в StringBuilder, обычно пишут либо в файл, либо выводят для пользователя, либо используют System.Diagnostics.Trace
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
13.08.2014, 14:17  [ТС]
someobject это вообще JsonObject. у него есть метод GetValue(), который возвращает значение. но настоящий тип этого значения известен только в рантайме. априори я предположительно знаю какой тип должен иметь GetValue() и хочу его сравнить с реальным типом, который есть во время рантайма. если типы совпадают, то все ok используем это значение, если нет, то пропускаем это значение.
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,100
13.08.2014, 14:17
удалено
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
13.08.2014, 14:20  [ТС]
nedel, ммм, пропустил однако. 13 студия.
в StringBuilder накапливаются сообщения для всех ошибочных преобразований и потом показываются пользователю в окошке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2014, 14:20
Помогаю со студенческими работами здесь

Как сделать так чтобы правый и левый блоки автоматически изменяли высоту, когда пишешь текст в контент?
Как сделать так, чтобы правый и левый блоки автоматически изменяли высоту когда пишешь текст в контент? Помогите!

Редактор блок-схем, как сделать так, чтобы линии соединяющие блоки сохранялись при перемещении блоков
Здравствуйте! Сел за написание курсовой работы и сильно заинтересовал один вопрос: Каждый блок можно соеденить линией - двойным кликом...

Сделать так, чтобы над trackbar'ом писалась цифра на которую установлен бугунок
Доброго времени суток ребят... нужно сделать так чтобы над trackbar'ом писалась цифра на которую ты поставил бугунок. Заранее спасибо.

Управление исключением - try и catch
задача такая когда я ввожу цифру программа добавляет в listbox это число тока уже не число а текст , а если ввожу букву программа должна...

Try/ catch. как сделать чтобы ошибка обрабатывалась?
Используется: Octokit.net Имеется кнопка. private async void button1_Click(object sender, EventArgs e) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru