我有以下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条件?
答案 0 :(得分:3)
您可以使用LINQ的All
或Any
方法来评估数组元素的条件:
// 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)))