Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73

Вызов метода из цикла

02.10.2015, 01:05. Показов 4126. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть List стрингов.
Есть массив стрингов - ключевые слова.
Есть набор методов, которые для каждого ключевого слова делают обработку текста.
Ключевых слов и соответствующих методов очень много.
Цикл перебирает List стрингов и находит, что в выбранной строке присутствует ключевое слово.
Как вызвать соответствующий слову метод?
Может быть можно сделать массив методов или коллекцию методов, и вызвать метод по индексу в соответствии с индексом слова в массиве ключевых слов?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.10.2015, 01:05
Ответы с готовыми решениями:

Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода
В базовом классе метод помечен как virtual. Насколько я понял из книги: override означает, что метод не утрачивает связи с базовым...

Вызов методов классов друг у друга (вызов метода из другого класса)
Есть несколько классов, которые могут вызывать методы (функции) друг у друга. Логика: класс1 имеет метод А, класс2 имеет метод Б, класс1...

Вызов переменной метода A из метода В
Добрый день. Подскажите как происходит вызов Например даны два класс А и В, в каждом классе есть Метод 1 и метод 2 class A { void...

10
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
02.10.2015, 01:43
Лучший ответ Сообщение было отмечено manumozz как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            Dictionary<string, Action<string>> keywordHandlers = new Dictionary<string, Action<string>>();
 
            keywordHandlers.Add("one", (s) => Console.WriteLine("one found in " + s));
            keywordHandlers.Add("two", (s) => Console.WriteLine("two found in " + s));
            keywordHandlers.Add("three", (s) => Console.WriteLine("three found in " + s));
 
            List<string> strings = new List<string>();
            strings.Add("123 one 456");
            strings.Add("123 two 456");
            strings.Add("123 three 456");
 
            foreach (var str in strings)
            {
                foreach (var kv in keywordHandlers)
                {
                    if (str.Contains(kv.Key))
                        kv.Value(str);
                }
            }
1
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
02.10.2015, 10:48  [ТС]
хм... мда... я первый год учусь программированию, сейчас вот проходим ООП. Я честно пытался понять этот код, просидел с ним долго. Не дорос я до такого. А есть вариант решения проще?

Добавлено через 7 минут
Да, ещё... это код для точки входа консольный. А у меня вэбформа и я пишу бизнеслогику программы.

Добавлено через 9 минут
Да ещё, текстовый файл я менять не могу, я его укладываю в list<string>, забираю в логику и уже здесь пытаюсь обработать.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
02.10.2015, 14:08
Цитата Сообщение от manumozz Посмотреть сообщение
хм... мда... я первый год учусь программированию, сейчас вот проходим ООП. Я честно пытался понять этот код, просидел с ним долго. Не дорос я до такого. А есть вариант решения проще?
Добавлено через 7 минут
Да, ещё... это код для точки входа консольный. А у меня вэбформа и я пишу бизнеслогику программы.
Добавлено через 9 минут
Да ещё, текстовый файл я менять не могу, я его укладываю в list<string>, забираю в логику и уже здесь пытаюсь обработать.
Куда же еще проще то, и так код элементарный. Он никак не привязан к консоли или чему-то еще, вывод в консоль тут просто для примера, вы можете его заменить на что угодно. Причем тут текстовый файл тоже не ясно, код работает с List<string>, откуда этот список берется коду совершенно неважно.
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
02.10.2015, 18:22  [ТС]
Вот какой код получается, но я пока не пойму как заставить его работать правильно.
Нужно, чтобы содержимое string line сравнилось с библиотекой keywordHandlers. Если обнаружится совпадение, должен запуститься соответствующий метод. После чего line должна взять следующую строку из all_line_artikles и заново сравнить с библиотекой до совпадения.

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
Dictionary<string, Action<string>> keywordHandlers;
public void Create_dict_keywordHandlers(ref int cnt, int num_of_company)
        {
            int i = cnt;
            int index_of_company = num_of_company;
 
            this.keywordHandlers = new Dictionary<string, Action<string>>();
 
            this.keywordHandlers.Add("-----------------",           (s) => this.Search_key_Company(ref i));
            this.keywordHandlers.Add("Address: ",                   (s) => this.Set_address_company(ref i, index_of_company));
            this.keywordHandlers.Add("No. of Employees in Israel:", (s) => this.Set_num_employees(ref i, index_of_company));
            this.keywordHandlers.Add("Company Established:",        (s) => this.Set_the_year_of_establishment(ref i, index_of_company));
            this.keywordHandlers.Add("-->",                         (s) => this.Set_new_vacancy(ref i, index_of_company));
            
        }
        
        
        public void Search_key_words(ref int i, int index_of_company)
        {
            this.Create_dict_keywordHandlers(ref i, index_of_company);
 
            for (i += 1; i < this.all_lines_articles.Count; i ++ )
            {
                line = all_lines_articles[i];
                foreach (var kwh in keywordHandlers)
                {
                    if (line.Contains(kwh.Key))
                    {
                        kwh.Value(line);
                    }
                }
            }
        }
Добавлено через 22 минуты
я кажется понял, надо просто после строки
kwh.Value(line);
написать break;
В общем огромное спасибо. Очень здорово.
И было бы вообще круто если бы вы чуть чуть объяснили как работает этот код. Непонятно что происходит в строке kwh.Value(line);
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
02.10.2015, 18:55
Цитата Сообщение от manumozz Посмотреть сообщение
Непонятно что происходит в строке kwh.Value(line);
Вызов делегата, которому соответствует некий метод с сигнатурой void SomeMethod(string arg), которому передается строка в качестве аргумента, но вы ее не используете, а вместо этого индексы передаете, а потом наверняка по индексу строку получаете, хотя могли бы сразу иметь строку в качестве аргумента.
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
02.10.2015, 19:48  [ТС]
Я прочитал это несколько раз. Ничего не понял. Вы бы не могли это пояснить чуть подробнее, как если бы разговаривали с человеком недалёким, ну в смысле близким.

Добавлено через 47 минут
И ещё вопрос, у меня не передаётся запускаемому методу номер строки с которой надо работать. Как в момент обращения к запуску метода передать ему номер активной строки?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
02.10.2015, 20:14
Цитата Сообщение от manumozz Посмотреть сообщение
Я прочитал это несколько раз. Ничего не понял. Вы бы не могли это пояснить чуть подробнее, как если бы разговаривали с человеком недалёким, ну в смысле близким.
Это просто вызов метода, например если текущая строка содержит "No. of Employees in Israel:", то вызывается следующий метод:
C#
1
2
3
4
void AnonymousMethod1(string arg)
{
    this.Set_num_employees(ref i, index_of_company);
}
Цитата Сообщение от manumozz Посмотреть сообщение
И ещё вопрос, у меня не передаётся запускаемому методу номер строки с которой надо работать. Как в момент обращения к запуску метода передать ему номер активной строки?
Поменяйте сигнатуру Action добавив соответствующие аргументы, например Action<string, int>, а вызов будет kwh.Value(line, i);

Я все же не понимаю зачем вам передавать номер строки, если вы можете передавать сразу саму строку как это изначально задумывалось
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
02.10.2015, 20:58  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Я все же не понимаю зачем вам передавать номер строки, если вы можете передавать сразу саму строку как это изначально задумывалось
Я не могу понять как это задумывалось, я иду по коду на ощупь. Как это задумывалось? Что значить предавать сразу саму строку?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
02.10.2015, 21:26
Задумывалось что-то типа этого:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
        Dictionary<string, Action<string>> keywordHandlers;
 
        public void Create_dict_keywordHandlers()
        {
            keywordHandlers = new Dictionary<string, Action<string>>();
 
            keywordHandlers.Add("-----------------", Search_key_Company);
            keywordHandlers.Add("Address: ", Set_address_company);
            keywordHandlers.Add("No. of Employees in Israel:", Set_num_employees);
            keywordHandlers.Add("Company Established:", Set_the_year_of_establishment);
            keywordHandlers.Add("-->", Set_new_vacancy);
        }
 
        public void Search_key_words()
        {
            Create_dict_keywordHandlers();
 
            foreach (string line in all_lines_articles)
            {
                foreach (var kwh in keywordHandlers)
                {
                    if (line.Contains(kwh.Key))
                    {
                        kwh.Value(line);
                    }
                }
            }
        }
 
        private void Search_key_Company(string line)
        {
             // что-то делаем со строкой...
        }
 
        private void Set_address_company(string line)
        {
             // что-то делаем со строкой...
        }
 
        private void Set_num_employees(string line)
        {
             // что-то делаем со строкой...
        }
 
        private void Set_the_year_of_establishment(string line)
        {
             // что-то делаем со строкой...
        }
 
        private void Set_new_vacancy(string line)
        {
             // что-то делаем со строкой...
        }
0
2 / 2 / 0
Регистрация: 16.04.2015
Сообщений: 73
02.10.2015, 21:39  [ТС]
а, теперь понял. Дело в том, что во время обработки текста я должен, в том числе, сформировать описания: компании, вакансии. И в этом случае я буду формировать список строк от начала, до конца описания. В этом случае мне удобнее передать номер строки, и далее программа последовательно забирает в стринговую переменную очередную строку, формируя описание.
У меня появилась вот какая идея. У меня программа состоит из цепочки циклов. При этом номер счётчика должен передаваться от цикла к циклу. Может быть правильнее объявить переменную int в классе и использовать её во всех циклах? Я так попробовал, код вроде бы работает, но в дебаггере вдруг начинает бестолково, хаотично скакать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2015, 21:39
Помогаю со студенческими работами здесь

вызов метода
Добрый день, подскажите пожалуйста почему при вызове метода pole из конструктора картинка не отображается, а если вызвать этот же метод по...

Вызов метода из класса
Здравствуйте! у меня такой вопрос, есть некоторая программа, совершающая операции над матрицами. методы, совершающие эти операции находятся...

Потокобезопасный вызов метода
Признаюсь, потокобезопасность и делегаты для меня тёмный лес, поэтому подскажите пожалуйста, когда мне нужно потокобезопасно изменить...

Многопоточный вызов метода
Есть некий сайт, страницы которого нужно спарсить (использую Html Agility Pack). Вызов начала парсинга происходит по нажатию кнопки в...

Событие на вызов метода
Есть класс.У него 10 разных методов,который вызываются последовательно. Мне нужно каждый раз выводить название работающего метода. Как...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru