Как избежать написания каждой вариации простого оператора if для разных строк

Например, если в текстовом поле, заполненном множеством различных номеров деталей из списка материалов для компьютерных деталей, я хочу, чтобы в любой момент времени только один тип кабеля cat5, и, если замечены два разных типа, предупреждал пользователя. Номера деталей кабеля cat5 могут быть следующими: cat5PART#1, cat5PART#2 и cat5PART#3. Так что, если виден только один номер по каталогу cat5, не стоит беспокоиться, но как только вы увидите два разных типа или больше, предупредите. Я мог бы легко написать это вручную три раза для каждого варианта, но в большом списке деталей это заняло бы больше времени и рисковало ошибками. Кроме того, мне бы очень хотелось узнать, как программисты справляются с этим типом функций. Я также не знаю, как это называется, так что я не знаю, как Google для него, несмотря на то, что я знаю, что будет много решений для этой конкретной ситуации, так что это неприятно, чтобы люди ошибались на форуме для что-то так просто.

Ниже приведен пример моего кода, который, очевидно, не работает, потому что он будет предупреждать только об обнаружении всех трех частей, а не только об обнаружении двух. Я предполагаю, что я бы использовал некоторые варианты & и | а может это что то совсем другое?

В принципе, я не хочу писать в большем масштабе.

если содержит часть 1 и часть 2

если содержит часть 1 и часть 3

если содержит часть 2 и часть 3

Спасибо.

    if ((textBox2.Text.Contains("PART#1"))
      && (textBox2.Text.Contains("PART#2"))
      &&  (textBox2.Text.Contains("PART#3")))
              {
            MessageBox.Show("2 types of cat5 part numbers seen at the same time");
              }

4 ответа

Решение

Вы можете попробовать это:

string[] parts = new [] {"PART#1", "PART#2", "PART#3"};
int count = parts.Count(s => textBox2.Text.Contains(s));
if (count >= 2) ...

Вы можете использовать Linq /Count() проверить, содержатся ли по крайней мере x строк, которые вы хотите проверить textBox2.Text:

string[] parts = { "PART#1", "PART#2", "PART#3" };
if(parts.Count(s=> textBox2.Text.Contains(s)) >= 2)
{
   MessageBox.Show("2 types of cat5 part numbers seen at the same time");
}

По сути, эта проблема решается путем конструирования вещей немного по-другому.

Что вам действительно нужно, так это запустить некоторую проверку правил для некоторого ввода, так что тогда я, вероятно, создам что-то более общее, и тогда каждое правило будет содержать хороший набор свойств, которые оно хочет проверить. Затем вы вызываете это из общего этапа обработки данных "правила запуска против ввода".

Возможно, это звучит немного чрезмерно, но в целом приятно делать такие вещи, чтобы вы были готовы к изменениям.

В конце (в самом конкретном правиле) вы, несомненно, получите реализацию, немного похожую на вашу, но, вероятно, написанную более коротким способом, как показала BrokenGlass.

Добавить каждую строку в List<string> а затем перебрать каждый с foreach заявление.

Другие вопросы по тегам