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()
这只是我目前所知的方式。
非常感谢任何帮助。
答案 0 :(得分:2)
你想要这样的东西:
var anyFlameWords =
text
.Split(' ')
.Any(word => flame.Contains(word));
if (anyFlameWords)
Console.WriteLine("1");
你不需要First / FirstOrDefault,除非你想要集合中的第一个元素,它看你现有的代码并不是你需要的。
答案 1 :(得分:1)
只需在if-case中添加break;
:
foreach (string item in text.Split(' '))
{
bool testerino = flame.Any(item.Contains);
if (testerino)
{
Console.WriteLine("1");
break;
}
}
break
导致立即退出foreach
- 循环。
答案 2 :(得分:1)
这个linq可能会有所帮助
bool badWordExists = text.Split(' ').Any(s => flame.Contains(s));
if(badWordExists) Console.WriteLine("1");
答案 3 :(得分:1)
在第一场比赛后你可以休息。
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");