有没有办法缩短我的 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
}

有没有办法缩短我的 if(单词.包含(“树”) ||词.包含(“水”)||词.包含(“天空”))

只需定义一个带有术语的数组并使用 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)))