如何避免写一个简单的“;如果包含“;语句

本文关键字:如果 语句 包含 简单 一个 何避免 | 更新日期: 2023-09-27 18:20:47

例如,如果在一个文本框中,充满了计算机零件材料列表中的许多不同零件号,我在任何给定时间只想要一种类型的cat5电缆,如果看到两种不同类型的电缆,则警告用户。cat5电缆的零件号可以是:cat5PART#1、cat5PART#2和cat5PART#3。因此,如果只看到一个cat5零件号,不用担心,但只要看到两个不同类型或更多,就要发出警告。

我可以很容易地为每个变体手动写三次,但在更大的零件列表中,这需要更长的时间,而且有出错的风险。另外,我很想知道程序员是如何处理这类函数的。我也不知道它叫什么,所以我不知道如何在谷歌上搜索它

下面是我的代码的一个例子,它显然不起作用,因为它只会在检测到所有三个部分时发出警告,而不仅仅是在检测到两个部分时。我想我会使用&|的一些变体,或者可能是完全不同的东西?

基本上我不想在更大规模的上写出来

如果包含第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");
}

如何避免写一个简单的“;如果包含“;语句

你可以试试这个:

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

您可以使用Linq/Count()来测试textBox2.Text:中是否包含至少x个要测试的字符串

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语句迭代每个字符串。