【问题标题】:Looping through dictionary object遍历字典对象
【发布时间】:2026-01-23 19:45:02
【问题描述】:

我对 .NET 非常陌生,习惯于使用 PHP。我需要通过对象字典通过foreach 进行迭代。我的设置是一个 MVC4 应用程序。

模型如下所示:

public class TestModels
{
    Dictionary<int, dynamic> sp = new Dictionary<int, dynamic>
    {
        {1, new {name="abc", age="1"}},
        {2, new {name="def", age="2"}}
    }
}

控制器:

public class TestController : Controller
{
   Models.TestModels obj = new Models.TestModels();
}

如何循环遍历obj 对象并检索字典的值并将它们打印在视图中?

【问题讨论】:

标签: c# .net


【解决方案1】:

一种方法是遍历字典的键,我建议这样做:

foreach(int key in sp.Keys)
    dynamic value = sp[key];

另一种方式,是作为一对序列循环遍历字典:

foreach(KeyValuePair<int, dynamic> pair in sp)
{
    int key = pair.Key;
    dynamic value = pair.Value;
}

我推荐第一种方法,因为如果您使用适当的 LINQ 语句修饰 Keys 属性,您可以更好地控制检索项目的顺序,例如,sp.Keys.OrderBy(x =&gt; x) 可以帮助您按键的升序检索项目.请注意Dictionary 在内部使用hash table 数据结构,因此如果您使用第二种方法,则项目的顺序不容易预测。

更新(2016 年 12 月 1 日):将 vars 替换为实际类型,以使答案更加清晰。

【讨论】:

  • 那么要在视图中完成吗? value 也将包含这两个值,对吗?那么我只需要执行 value.0 和 value.1 即可打印?
  • 没有。你会像我的回答那样做,或者根据新浪的回答,你可以使用value 和你给变量的名称来调用它,例如value.namevalue.age.
  • 小点:如果不使用 var 关键字会更容易理解
【解决方案2】:

这取决于你在字典中的目标

Models.TestModels obj = new Models.TestModels();

foreach (var keyValuPair in obj.sp)
{
    // KeyValuePair<int, dynamic>
}

foreach (var key in obj.sp.Keys)
{
     // Int 
}

foreach (var value in obj.sp.Values)
{
    // dynamic
}

【讨论】:

    【解决方案3】:

    你可以这样做。

    Models.TestModels obj = new Models.TestModels();
    foreach (var item in obj.sp)
    {
        Console.Write(item.Key);
        Console.Write(item.Value.name);
        Console.Write(item.Value.age);
    }
    

    您现在最有可能遇到的问题是集合是private。如果在此行的开头添加public

    Dictionary<int, dynamic> sp = new Dictionary<int, dynamic> 
    

    您应该能够从控制器内部的函数访问它。

    编辑:添加完整的TestModels 实现的功能示例。

    你的 TestModels 类应该是这样的。

    public class TestModels
    {
        public Dictionary<int, dynamic> sp = new Dictionary<int, dynamic>();
    
        public TestModels()
        {
            sp.Add(0, new {name="Test One", age=5});
            sp.Add(1, new {name="Test Two", age=7});
        }
    }
    

    您可能还想了解dynamic 关键字。

    【讨论】:

      【解决方案4】:
      public class TestModels
      {
          public Dictionary<int, dynamic> sp = new Dictionary<int, dynamic>();
      
          public TestModels()
          {
              sp.Add(0, new {name="Test One", age=5});
              sp.Add(1, new {name="Test Two", age=7});
          }
      }
      

      【讨论】: