Return 如果 list1 包含 list2 中的任何字符串的一部分,则每个项目都为真

Return true per item if list1 contains part of any string from list2

如果 list1 中的字符串(或字符串的一部分)与 list2 中的字符串相同,则需要将字符串添加到列表框中。

我现在有:

            int g = 0;

            while (g < musthaves.Count())
            {
                if (list1.Contains(list2[g].ToString()))
                {
                    listBox14.Items.Add("Found: " + list2[g].ToString());
                }
                else
                {
                    listBox14.Items.Add("Not found: " + list2[g].ToString());
                }
                g++;
            }

列表是:

列表 1:
测试用例扫描文档
测试用例上传文件
测试用例删除文档

列表 2:
上传文件
扫描文档
表示不一致


所以列表框应该包含:

找到:上传文档
找到:扫描文档
未找到:表示不一致

但是我的结果不是每个字符串都找到。

感谢任何帮助。

But my results are Not found for every string.

因为 List.Contains 检查项目的完全匹配。例如。您正在检查 list1 中是否有字符串 "upload document",但事实并非如此。

您需要的是 Enumerable.Any 检查序列中是否有任何元素符合条件。 String.Contains 检查第二个列表中的字符串是否是 list1:

中的字符串的子字符串
if (list1.Any(l1 => l1.Contains(list2[g])))

您只检查完整字符串是另一个列表中的项目之一,但您的要求是

If a string (or part of a string) from list1 is the same as a string in list2

所以您需要检查 list2 中的每个短语,如果短语 包含 来自 list1 的预期短语之一(呃,我建议为变量使用更具描述性的名称 - 将简化对话 :))

foreach (var requiredPhrase in list1)
{
    if (list2.Any(phrase => phrase.Contains(requiredPhrase))
    {
        // Found
    }
    else
    {
        // Not found
    }
}

以下内容应该对您有所帮助。

list2.Where(x=>list1.Any(c=>c.Contains(x)));

上述查询将遍历 list2 中的每个元素并检索 list1[=13= 中任何项目的 子字符串 ]