【问题标题】:Building if condition from array从数组构建 if 条件
【发布时间】:2018-01-11 00:00:50
【问题描述】:

我有以下if 条件:

if (!string.IsNullOrEmpty(str) &&
    (!str.ToLower().Contains("getmedia") && !str.ToLower().Contains("cmsscripts") && 
     !str.ToLower().Contains("cmspages") && !str.ToLower().Contains("asmx") &&
     !str.ToLower().Contains("cmsadmincontrols"))
  )

我正在尝试创建一个关键字数组,而不是放置多个 AND 条件,您能帮忙吗?

string[] excludeUrlKeyword = ConfigurationManager.AppSettings["ExcludeUrlKeyword"].Split(',');

for (int i = 0; i < excludeUrlKeyword.Length; i++)
{
    var sExcludeUrlKeyword = excludeUrlKeyword[i];
}

如何从数组中构建相同的 if 条件?

【问题讨论】:

  • 使用 LinQ 任意或全部
  • 我们可以在没有 LINQ 的情况下编写代码吗?

标签: c# asp.net .net arrays for-loop


【解决方案1】:

您可以使用 LINQ 的 AllAny 方法来评估数组元素的条件:

// Check for null/empty string, then ...
var lower = str.ToLower();
if (excludeUrlKeyword.All(kw => !lower.Contains(kw))) {
    ...
}

请注意,这不是最快的方法:使用正则表达式会更好。作为一个额外的好处,当您丢弃带有作为较长单词的一部分出现的关键字的字符串时,正则表达式将防止“别名”。

如果您想尝试正则表达式方法,请将配置文件中的ExcludeUrlKeyword 从逗号分隔的getmedia,cmsscripts,cmspages,asmx 更改为管道分隔的getmedia|cmsscripts|cmspages|asmx,这样您就可以直接将其提供给正则表达式:

var excludeUrlRegex = ConfigurationManager.AppSettings["ExcludeUrlKeyword"];
if (!Regex.IsMatch(str.ToLower(), excludeUrlRegex)) {
    ...
}

【讨论】:

    【解决方案2】:

    Linq Any 应该这样做

    if (!string.IsNullOrEmpty(str) && !excludeUrlKeyword.Any(x => str.ToLower().Contains(x)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2013-05-31
      • 2020-07-26
      • 1970-01-01
      • 2018-03-03
      • 2021-04-02
      • 2016-11-24
      相关资源
      最近更新 更多