如何使用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 text
与Contains()
。
我不需要使用foreach
甚至First()
,这只是迄今为止我所知道的唯一方法。
您想要这样的内容:
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");