从数组构建if条件

时间:2017-08-03 11:44:33

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

我有以下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条件?

2 个答案:

答案 0 :(得分:3)

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

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

请注意,这不是最快的方法:使用正则表达式会更好。作为额外的奖励,正则表达式会阻止&#34;别名&#34;,当您丢弃带有关键字的字符串时,该字符串会显示为较长字词的一部分。

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

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

答案 1 :(得分:1)

Linq Any应该这样做

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