Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для taksebe
22 / 22 / 3
Регистрация: 11.12.2013
Сообщений: 122
.NET 2.x

Сократить код, содержащий много блоков if

14.12.2013, 22:44. Показов 1765. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Данный код можно сократить?

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
strSQL1 = "";
            if (nameTAble == "Место")
            {
                #region if Place
                if (TB[0] == "" && TB[1]== "" && TB[2] == "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble;
                }
                if (TB[0]!= "" && TB[1] == "" && TB[2] == "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [" + fld[0] + "]=" + Convert.ToInt32(TB[0]);
                }
                if (TB[0] == "" && TB[1] != "" && TB[2] == "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [" + fld[1] + "]= '" + TB[1]+"'";
                }
                if (TB[0] == "" && TB[1] == "" && TB[2] != "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [" + fld[2] + "] LIKE '%" + TB[2] + "%'";
                }
                if (TB[0] != "" && TB[1] != "" && TB[2] == "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [" + fld[0] + "]=" + Convert.ToInt32(TB[0])+" AND ["+fld[1]+"]='"+TB[1]+"'";
                }
                if (TB[0] != "" && TB[1] == "" && TB[2] != "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [" + fld[0] + "]=" + Convert.ToInt32(TB[0]) + " AND [" + fld[2] + "] LIKE '%" + TB[2] + "%'";
                }
                if (TB[0] == "" && TB[1] != "" && TB[2] != "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [" + fld[1] + "]='" + TB[1] + "' AND [" + fld[2] + "] LIKE '%" + TB[2] + "%'";
                }
                if (TB[0] != "" && TB[1] != "" && TB[2] != "")
                {
                    strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [" + fld[0] + "]=" + Convert.ToInt32(TB[0]) + " AND [" + fld[1] + "]='" + TB[1] + "' AND [" + fld[2] + "] LIKE '%" + TB[2] + "%'";
                }
                #endregion
            }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2013, 22:44
Ответы с готовыми решениями:

Сократить код, содержащий множество условий
Подскажите, как можно сократить данный код, чтобы не писать 8 раз почти одно тоже (только с сдвигом)? С каждым разом увеличивается номер...

Удалить столбец, содержащий минимальный элемент матрицы (как сократить код?)
Приветствую. Подскажите, можно ли как-то сократить код? Мне он кажется громоздким, или это норм? Без использования векторов. И да, что...

Слишком длинный типовой код в UserForm VBA. Как сократить код?
Программа выдает ошибку о слишком длинном коде. 1. Есть форма, в форме Multipage с 30 вкладками, на каждой вкладке 20 кнопок. 2. Тексты...

11
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
14.12.2013, 23:37
Для этого можно использовать switch. если есть, например, 10 условий, то код будет;

C#
1
2
3
4
5
6
7
8
9
10
11
 int n = 10;
 switch (n)
 {
   case 1:
     //вводится код реакции на первое условие
    break;
    .....
   case 10:
    //вводится код реакции на последнее условие
   break;
 }
1
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
14.12.2013, 23:53
не тестил, но идею, надеюсь, донес:

Кликните здесь для просмотра всего текста
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
string additional = "";
bool found = false;
try
{
    int.Parse(TB[0]);
    additional += " WHERE [" + fld[0] + "]=" + TB[0];
    found = true;
}
catch (Exception e) {}
 
if (!string.IsNullOrEmpty(TB[1])
{
    if (found)
        additional += " AND ";
    else
    {
        found = true;
        additional += " WHERE "
    }
 
    additional += "[" + fld[1] + "]='" + TB[1];
}
 
if (!string.IsNullOrEmpty(TB[1])
{
    if (found)
        additional += " AND ";
    else
    {
        found = true;
        additional += " WHERE "
    }
 
    additional += "[" + fld[2] + "] LIKE '%" + TB[2] + "%'";
}
 
string strSQL1 = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + additional;


Добавлено через 1 минуту
Цитата Сообщение от zna926 Посмотреть сообщение
Для этого можно использовать switch
нельзя, тк switch не позволяет работать с комбинациями условий
2
 Аватар для taksebe
22 / 22 / 3
Регистрация: 11.12.2013
Сообщений: 122
14.12.2013, 23:54  [ТС]
sezada,
на сколько я понял то нас* еще больше
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
15.12.2013, 00:02
Цитата Сообщение от taksebe Посмотреть сообщение
на сколько я понял то нас* еще больше
на одну строку короче. если добавить #region и #endregion - то на три. если убрать разделительные пустые строки - на восемь. честно говоря, по числу символов разница примерно втрое

а если откровенно, то это гораздо нагляднее и проще для отладки. я, например, даже не сразу понял, что перебираются комбинации аргументов - от десятков "==" и "!=" зарябило в глазах
0
 Аватар для taksebe
22 / 22 / 3
Регистрация: 11.12.2013
Сообщений: 122
15.12.2013, 00:05  [ТС]
Не по теме:

просто пишу курсовую по БД в С# аж мозг кипит
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
15.12.2013, 16:19
Цитата Сообщение от taksebe Посмотреть сообщение
просто пишу курсовую по БД в С# аж мозг кипит
Может так можно немного помочь мозгу
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
       static public string Condition(string TB0, string TB1, string TB2)
        {
            StringBuilder condition = new StringBuilder("111");
            if (TB0 == string.Empty) condition[0] = '0';
            if (TB1 == string.Empty) condition[1] = '0';
            if (TB2 == string.Empty) condition[2] = '0';
            return condition.ToString();
 
        }
 
 static void Main(string[] args)
 {
     // ................
 
 Dictionary<string, string> dic = new Dictionary<string, string>();
 
            string additional = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble;
            dic.Add("000", additional);
 
            additional = "SELECT " + fld[1] + "," + fld[2] + " FROM " + nameTAble + " WHERE [";
            dic.Add("100", additional + fld[0] + "]="    + TB[0] );
            dic.Add("010", additional + fld[1] + "]=  '" + TB[1]+"'" );
            dic.Add("001", additional + fld[2] + "]  LIKE '%" + TB[2] + "%'" );
            dic.Add("110", additional + fld[0] + "]= "   + TB[0]+" AND ["+fld[1]+"]='"+TB[1]+"'");
            dic.Add("101", additional + fld[0] + "]= "   + TB[0] + " AND [" + fld[2] + "] LIKE '%" + TB[2] + "%'" );
            dic.Add("011", additional + fld[1] + "]= '"  + TB[1] + "' AND [" + fld[2] + "] LIKE '%" + TB[2] + "%'");
            dic.Add("111", additional + fld[0] + "]= "   + TB[0] + " AND [" + fld[1] + "]='" + TB[1] + "' AND [" + fld[2] + "] LIKE '%" + TB[2] + "%'");
 
 
 
            string strSQL1 = "";
            if (nameTAble == "Место")
            {
                strSQL1 = dic[Condition(TB[0], TB[1], TB[2])];
            }
 
}
А где нужно, и напрямую задать
strSQL1 = dic["100"];
0
 Аватар для taksebe
22 / 22 / 3
Регистрация: 11.12.2013
Сообщений: 122
15.12.2013, 16:53  [ТС]
а можно не много пояснить работу этого кода?
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
15.12.2013, 17:17
Цитата Сообщение от taksebe Посмотреть сообщение
а можно не много пояснить работу этого кода?
Вы сравниваете три элемента между собой.
Каждый элемент имеет два состояния - пустой (0) и не пустой (1)
Следовательно, можно получить комбинацию этих состояния. Например 100 (TB[0] не пустой, остальные - пустые.)

Эту комбинацию высчитывает Condition

Значения, для каждой комбинации хранятся в словаре dic
0
 Аватар для taksebe
22 / 22 / 3
Регистрация: 11.12.2013
Сообщений: 122
15.12.2013, 17:31  [ТС]
Цитата Сообщение от Евгений В Посмотреть сообщение
Вы сравниваете три элемента между собой.
Каждый элемент имеет два состояния - пустой (0) и не пустой (1)
Следовательно, можно получить комбинацию этих состояния. Например 100 (TB[0] не пустой, остальные - пустые.)

Эту комбинацию высчитывает Condition

Значения, для каждой комбинации хранятся в словаре dic
очень инетересно .... как это выйдет

Евгений В,
а если параметров более чем три, то что делать?
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
15.12.2013, 19:02
Цитата Сообщение от taksebe Посмотреть сообщение
а если параметров более чем три, то что делать?
Сколько у вас условий, и сколько параметров там будет фигурировать?
0
 Аватар для taksebe
22 / 22 / 3
Регистрация: 11.12.2013
Сообщений: 122
15.12.2013, 19:20  [ТС]
Цитата Сообщение от Евгений В Посмотреть сообщение
Сколько у вас условий, и сколько параметров там будет фигурировать?
у меня 5 таблиц и 2: 7 столбцов, 3: 3 столбца
но таблицы разные
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2013, 19:20
Помогаю со студенческими работами здесь

Много блоков div. И они наезжают друг на друга при изменении размера окна
Ребят, помогите, уже кровь из носа скоро пойдет... Начал делать сайт: не могу найти решение проблемы. Нужно, что бы блоки шли строго...

Сократить код
Помогите, пожалуйста, как-нибудь сократить код. Слишком он большой! ...

Сократить код
Здравствуйте, подскажите пожалуйста, как записать покороче код, циклом ? ImageView iv_foto_1; ImageView iv_foto_5; ImageView...

Сократить код
Имеются несколько тысяч файлов с текстом и фразами text1 ... text9 и файлы 1.txt....9.txt с нужным текстом Код меняет фразу text1...

сократить Код
есть небольшой код по вычислению столбца в datagridview, но вот как его укоротить не знаю private void button1_Click(object sender,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru