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

175
07 октября 2019, 14:50

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

Answer 1

Делается это так. Добавляем нужные символы в HashSet<char> (кстати, в него нельзя добавить одинаковые символы ни случайно, ни специально). Далее везде в коде проверяешь есть ли символ в HashSet<char>. Почитай про HashSet<T>, работает быстрее, чем обход массива, к примеру, на каждой итерации.

using System;
using System.Collections.Generic;
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var charSet = new HashSet<char>(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);
        }
    }
}
Answer 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<char>(map);
for (int i = 0; i < text.Length; i++) {
    if (set.Contains(text[i])) {
        ...
    }
}
READ ALSO
Подскажите не показывать в url product-category?

Подскажите не показывать в url product-category?

подскажите как в url не показывать product-category вот пример ссылки с которой нужно убрать:

151
Как подключить lazy load в woocmmerce?

Как подключить lazy load в woocmmerce?

У меня стоит Плагин, и я хочу что бы срабатывало на все изображения которые били загружены,через модуль вукомерс, внутри contentОн срабатывает...

138
Отправка базы данных на почту или загрузка в txt

Отправка базы данных на почту или загрузка в txt

Пытаюсь по нажатию на кпопку сделать отправку базы данных на почту, но в итоге приходит некоректное письмо!

154
Подмена URL в HTACCESS по REQUEST параметрам

Подмена URL в HTACCESS по REQUEST параметрам

Пример на js Наша ссылка для примера: http://examplecom/name-razdel/?module=shop&action=search&cat_id=0&a=&pr1=0&pr2=100&brand%5B%5D=22

132