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

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

13.08.2014, 12:41. Показов 1263. Ответов 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,095
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,095
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,095
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,095
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,095
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru