Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

C#: Избавиться от повторяющегося кода

#c_sharp #if


У меня есть множественные проверки в if-е, они содержат в себе повторяющийся код,
можно ли этого избежать? В дальнейшем символов для проверки будет больше.


    


Ответы

Ответ 1



Делается это так. Добавляем нужные символы в HashSet (кстати, в него нельзя добавить одинаковые символы ни случайно, ни специально). Далее везде в коде проверяешь есть ли символ в HashSet. Почитай про HashSet, работает быстрее, чем обход массива, к примеру, на каждой итерации. using System; using System.Collections.Generic; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var charSet = new HashSet(new[] { ' ', '-', ',', '.', '_', ':', ';', '?', '(', ')', '!' }); string text = "Hi! My name is John."; Console.WriteLine(text); for (int i = 0; i < text.Length; i++) { if (charSet.Contains(text[i])) { Console.WriteLine(i); } } Console.ReadKey(true); } } }

Ответ 2



Я бы сделал это при помощи String.Contains() из-за наглядности var map = " ,._:;&()!"; for (int i = 0; i < text.Length; i++) { if (map.Contains(text[i])) { ... } } Если же Вам важна производительность, все это дело можно сложить в HashSet и искать в нем var map = " ,._:;&()!"; var set = new HashSet(map); for (int i = 0; i < text.Length; i++) { if (set.Contains(text[i])) { ... } }

Комментариев нет:

Отправить комментарий