如何使用First() / FirstOrDefault()

本文关键字:FirstOrDefault 何使用 First | 更新日期: 2023-09-27 18:06:37

using System;
using System.Linq;
public class Program
{
    public static void Main()
    {
        var flame = new string[]
        {
        "bad", "word"
        }
        ;
        var text = "this contains some bad words";
        foreach (string item in text.Split(' '))
        {
            bool testerino = flame.Any(item.Contains);
            if (testerino)
            {
                Console.WriteLine("1");
            }
        }
    }
}
https://dotnetfiddle.net/Widget/as5iTs

我希望Console.WriteLine("1");只运行一次。我试图使用First()和FirstOrDefault(),但我无法使用它没有语法错误。为什么我要使用Split?我不知道。这是让.Contains()运行的唯一方法。我确实收到错误使用char item in textContains()

我不需要使用foreach甚至First(),这只是迄今为止我所知道的唯一方法。

如何使用First() / FirstOrDefault()

您想要这样的内容:

var anyFlameWords = 
  text
  .Split(' ')
  .Any(word => flame.Contains(word));
if (anyFlameWords)
    Console.WriteLine("1");

您不需要First/FirstOrDefault,除非您想要集合中的第一个元素,而查看您现有的代码并不是您所需要的。

您可以在第一次匹配后进行操作。

    foreach (string item in text.Split(' '))
    {
        bool testerino = flame.Any(item.Contains);
        if (testerino)
        {
            Console.WriteLine("1");
            break;
        }
    }

但是更简洁的替代方法是

if (test.Split(' ').Any(f=>flame.Contains(f))) Console.WriteLine("1");

如果您有兴趣了解如何在这里使用IEnumerable<T>.FirstOrDefault,请注意,您可以将谓词传递给FirstOrDefault以获得IEnumerable<T>中与该谓词匹配的第一项(或者如果没有匹配,则使用T的默认值):

var firstMatch = test.Split(' ').FirstOrDefault(w=>flame.Contains(w));
if (firstMatch != null) Console.WriteLine("1");

只需在if-case中添加一个break;:

    foreach (string item in text.Split(' '))
    {
        bool testerino = flame.Any(item.Contains);
        if (testerino)
        {
            Console.WriteLine("1");
            break;
        }
    }

break导致立即退出foreach -循环

这个链接可能有帮助

bool badWordExists = text.Split(' ').Any(s => flame.Contains(s));
if(badWordExists) Console.WriteLine("1");