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
相关产品推荐
相关产品推荐

