You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 基于List用Linq反射获取ViewModel属性判断baccess访问权限

实现逻辑说明

核心需求为遍历accessGroupList存储的所有属性名,反射读取ViewModel对应属性的布尔值,只要存在任意一个属性值为True,最终baccess为True,所有匹配属性值均为False或属性不存在时baccess为False。

原有代码的问题

  • 直接用属性名和整个accessGroupList做相等判断,逻辑完全错误,无法匹配到目标属性
  • 仅读取第一个匹配的属性值,没有遍历所有列表内的属性判断真值
  • 重复定义baccess变量,编译无法通过

标准实现代码

MemberViewModel result = new MemberViewModel();
result.IsPractices = true;
result.IsUser = false;

var accessGroupList = new List<string>();
accessGroupList.Add("IsUser");
accessGroupList.Add("IsBestPractices");

bool baccess = false;
Type viewModelType = result.GetType();
foreach (string propName in accessGroupList)
{
    // 查找对应属性,需要忽略大小写可在GetProperty方法加StringComparison.OrdinalIgnoreCase参数
    var prop = viewModelType.GetProperty(propName);
    if (prop == null || prop.PropertyType != typeof(bool))
    {
        // 不存在或非布尔类型的属性直接跳过,可按需调整为抛异常等逻辑
        continue;
    }
    bool value = (bool)prop.GetValue(result);
    if (value)
    {
        baccess = true;
        // 匹配到真值直接退出循环,无需继续遍历
        break;
    }
}

LINQ简化写法

bool baccess = accessGroupList.Any(propName => 
    result.GetType().GetProperty(propName)?.GetValue(result) is bool val && val);

内容的提问来源于stack exchange,提问作者Jefferson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:57:04