有没有办法缩短我的 if(单词.包含(“树”) ||词.包含(“水”)||词.包含(“天空”))
本文关键字:包含 天空 单词 if 我的 有没有 | 更新日期: 2023-09-27 17:57:08
标题上所说的差不多,我得到了一个带有~5的大if句子Contains
如果我重复几次,这看起来不太好看,有什么办法可以缩短它吗?
if(word.Contains("tree") ||word.Contains("water")||word.Contains("sky")||word.Contains("lake")||word.Contains("plant"))
{
//do something
}
只需定义一个带有术语的数组并使用 LINQ 表达式:
string[] searchTerms = { "tree", "water", ...}
if (searchTerms.Any(p => word.Contains(p)) {
// do something
}
你可以这样做:
if (new [] { "tree", "water", "sky", "lake", "plant", }.Any(w => word.Contains(w)))
{
//do something
}
是的,但是数组中的关键字,并切换它
var words = new[]{"tree","water","sky","lake"};
if(words.Any(w => word.Contains(w))){
// do something
}
你可以为此使用正则表达式:
if (Regex.IsMatch(word, "tree|water|sky|lake|plant")) {
// Do something
}
这种方法比使用 Contains
更灵活,因为它可以让您找到完整的单词匹配(即匹配"树"但不匹配"子树",或匹配"植物"但不匹配"植入物")
if (Regex.IsMatch(word, @"'b(tree|water|sky|lake|plant)'b")) {
// Do something
}
可能有十几种或更多方法可以对此进行编码。我真的不确定我会担心让它更短的代码,就像我会担心让它可维护和可读一样。像这样的东西,也许:
var wordsToCheck = new[] { "tree", "water", "sky", "lake" };
if (wordsToCheck.Any(wordToCheck => word.Contains(wordToCheck)))
{
}
看起来其他人打败了我。 但是您可以使用方法组使其非常简短。
var strs = new[] { "tree", "water", "sky", "lake", "plant" };
if(strs.Any(word.Contains))
{
}
您可以使用split然后使用Any
if("tree,water,sky,lake,plant".Split(',').ToList().Any(e=>word.Contains(e)))