c# - 检查列表中是否存在值 - 比循环更好的方法?

标签 c# asp.net .net

我有以下类数据结构:

public class clsUser
{
    public string userid { get; set; }
    public List<OrgPermission> orgs { get; set; }
}

public class OrgPermission
{
    public string Org { get; set; }
    public string SubOrg {get;set;}
    public List<string> type { get; set; }
}

List<string> type可以有诸如“admin”、“user”、“superuser”等值。

因此每个用户都可以有多个组织-子组织组合,每个组合都有多个用户角色。

用户类中的orgs和suborgs可以这样写:56%(这意味着他们可以看到以56开头的所有内容)

我想检查用户是否有权访问类型为“Admin”的页面上的 org-suborg 组合

现在我正在用一个循环来做这件事,它是这样工作的:

foreach (OrgPermission userOrg in user.orgs) {
  if ((ddlOrg.SelectedValue.StartsWith(userOrg.Org.Trim('%'))) && (ddlSubOrg.SelectedValue.StartsWith(userOrg.SubOrg.Trim('%')))) {
    if (userOrg.type.Contains("Admin"))
      btnSubmitToProd.Enabled = true;
    else
      btnSubmitToProd.Enabled = false;
    break; //break out of the loop if the org-sub org match is found
  }
}

是否有更好的方法来摆脱循环?还是我做得对?

最佳答案

这听起来像你想要的:

string orgValue = ddlOrg.SelectedValue;
string subOrgValue = ddlSubOrg.SelectedValue;
btnSubmitToProd = user.orgs
                      .Any(org => orgValue.StartsWith(org.Org.Trim('%')) &&
                                  subOrgValue.StartsWith(org.SubOrg.Trim('%')) &&
                                  org.type.Contains("Admin"));

关于c# - 检查列表中是否存在值 - 比循环更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16017860/

相关文章:

c# - 使用.NET Framework 4.8 WinForm webView控件显示本地html

c# - C# 中的组合框和自动完成

c# - Stream.Seek(0, SeekOrigin.Begin) 或 Position = 0

c# - ASP.NET 5 MVC6 User.GetUserId() 返回不正确的 ID

javascript - AngularJS 刷新时漂亮的 URL 路由

c# - 随机数生成器安全 : BCryptGenRandom vs RNGCryptoServiceProvider

c# - NHibernate:在更新/删除/插入映射到 View 的类时是否可以使用存储过程?

c# - Azure 服务总线中继 - 启用压缩

c# - 如何在不使用互操作的情况下通过 C# 取消隐藏 Excel 工作表

.net - 解析类型时是否可以更改配置的生命周期管理器?