我是.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
对象并检索字典的值并在视图中打印它们?
答案 0 :(得分: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;
}
我建议使用第一种方法,因为如果使用正确的LINQ语句装饰Keys
属性,则可以更好地控制检索项的顺序,例如,sp.Keys.OrderBy(x => x)
可帮助您以升序检索项目钥匙的顺序。请注意,Dictionary
在内部使用hash table数据结构,因此如果您使用第二种方法,则项目的顺序不易预测。
更新(2016年12月1日):将var
替换为实际类型,以使答案更加清晰。
答案 1 :(得分: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
}
答案 2 :(得分: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);
}
您现在最有可能遇到的问题是该集合为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关键字。
答案 3 :(得分: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});
}
}