如何在C#中实现类似AngularJS的非空键值对遍历与数组填充逻辑?
C# 实现对应 AngularJS 逻辑方案
我来帮你把这段AngularJS的逻辑转换成C#代码,先明确核心逻辑:遍历Roster的键值对,跳过值为空的条目;对于值非空的条目,按照值的数值循环对应次数,每次向目标集合中添加一个包含Key、Value、Picked、Users字段的对象。
步骤1:定义实体类
C#是强类型语言,我们需要先定义对应要添加的对象的实体类,匹配原逻辑中的字段:
public class RoasterItem { public string Key { get; set; } public int Value { get; set; } public int Picked { get; set; } // 对应原AngularJS中的空对象{},这里用Dictionary<string, object>适配任意键值对,也可替换为具体的用户类 public Dictionary<string, object> Users { get; set; } }
步骤2:核心逻辑实现
假设你的Roster对象在C#中对应Dictionary<string, int?>类型(支持值为null的场景),核心逻辑代码如下:
// 初始化你的Roster对象,替换成实际的数据源 Dictionary<string, int?> roster = new Dictionary<string, int?>() { { "RoleA", 3 }, { "RoleB", null }, { "RoleC", 2 } }; // 目标集合,对应原AngularJS中的$scope.openedModel.roastersArray List<RoasterItem> roastersArray = new List<RoasterItem>(); foreach (var kvp in roster) { // 检查值是否非空,且为正整数(确保循环次数有效) if (kvp.Value.HasValue && kvp.Value > 0) { for (int i = 0; i < kvp.Value; i++) { roastersArray.Add(new RoasterItem { Key = kvp.Key, Value = 1, // 和原逻辑一致,固定设置为1 Picked = 0, Users = new Dictionary<string, object>() // 初始化空字典对应原逻辑的{} }); } } }
额外说明
- 如果你的
Roster不是Dictionary类型,而是自定义的实体类,可以通过反射获取类的属性名和属性值,再遍历处理;但一般这种键值对场景用Dictionary更贴合原逻辑。 - 关于
Users字段:如果你的业务中有具体的用户模型,可以把Dictionary<string, object>替换为对应的User类实例(比如new User())或者空列表List<User>(),根据实际需求调整。
内容的提问来源于stack exchange,提问作者Sunny_Sid
相关产品推荐
相关产品推荐

