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

Например, если в текстовом поле, которое заполнено множеством различных номеров деталей из списка материалов для компьютерных компонентов, я хочу, чтобы в любой момент времени использовался только один тип кабеля 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 ]

6 голосов
/ 20 января 2012

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

string[] parts = new [] {"PART#1", "PART#2", "PART#3"};
int count = parts.Count(s => textBox2.Text.Contains(s));
if (count >= 2) ...
4 голосов
/ 20 января 2012

Вы можете использовать Linq / Count(), чтобы проверить, содержатся ли в 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");
}
хотя бы x строк, которые вы хотите проверить.
1 голос
/ 20 января 2012

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

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

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

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

0 голосов
/ 20 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...