36

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

4

4 回答 4

55

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

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

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

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

于 2013-02-06T01:17:15.553 回答
4

这取决于您在字典中的内容

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
}
于 2013-02-06T01:19:02.290 回答
1

你可以这样做。

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

您现在最可能遇到的问题是该集合是私有的。如果您将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});
    }
}

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

于 2013-02-06T01:20:17.880 回答
0
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});
    }
}
于 2016-09-21T19:36:37.647 回答