c# - 从数组构建 if 条件

标签 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 条件?

最佳答案

您可以使用 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)) {
    ...
}

关于c# - 从数组构建 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45483224/

相关文章:

c# - 使用 .NET 在 Windows XP 中刻录 DVD 所需的基本 COM 组件是什么?

c# - await 和 async 与 Task 并行库的区别

c# - 为什么 EntityFramework 的 LINQ 解析器以不同方式处理外部定义的谓词?

.net - 在 Word 选项加载项对话框中设置发布者

c# - 将结构从 c# 传递到 C dll

c# - LINQ + Foreach 与 Foreach + If

c# - 当类型看起来相同时,从缓存获取结构失败并出现强制转换错误

jQuery Validate 无法调用未定义的方法 'call'

c# - Azure Blob 存储上传失败

带类库项目的ASP.NET解决方案