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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:16:15