循环访问字典对象

我对.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对象并检索字典的值并在视图中打印它们?


一种方法是循环访问字典的键,我建议:

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 => x)可帮助您按升序检索项的关键。 请注意, Dictionary在内部使用哈希表数据结构,因此如果使用第二种方法,则项目顺序不易预测。

更新(2016年12月1日) :用实际类型替换var以使答案更清晰。


这取决于您在“词典”中的含义

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
}

你可以这样做。

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);
}

你现在最可能遇到的问题是收藏是私人的。 如果您将公开添加到此行的开头

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});
    }
}

您可能还想阅读动态关键字。

链接地址: http://www.djcxy.com/p/30387.html

上一篇: Looping through dictionary object

下一篇: how to iterate though dictionary<string,List<object>>