C# 如何循环浏览这本词典
我已经声明了这样一本词典:C# 如何循环浏览这本词典,c#,C#,我已经声明了这样一本词典: Dictionary<string, KeyValuePair<string, string>> dc = new Dictionary<string, KeyValuePair<string, string>>(); Dictionary dc=new Dictionary(); 现在我怎样才能循环通过它呢?我想要以下内容,因此我创建了该词典: 名称1 旧价值1 新价值1 姓名2 旧价值2 新价值2 …你可以这样循
Dictionary<string, KeyValuePair<string, string>> dc = new Dictionary<string, KeyValuePair<string, string>>();
Dictionary dc=new Dictionary();
现在我怎样才能循环通过它呢?我想要以下内容,因此我创建了该词典:
名称1
旧价值1
新价值1
姓名2
旧价值2
新价值2
…你可以这样循环
foreach (var pair in dc)
{
string name = pair.Key;
string oldValue = pair.Value.Key;
string newValue = pair.Value.Value;
// use the values
}
但我觉得你用错工具了。在我看来,您真的需要继续定义一个合适的类来保存名称和值,然后使用该类的
列表 我会使用a而不是KeyValuePair
。但那只是我。你能解释一下这本字典的用途吗?将一个键映射到一个键值对有点奇怪。可能有更好的数据结构来完成您想要的任务。“旧”和“新”值实际上是键和值吗?听起来旧值不是一个键;这听起来像是一个值。@EricLippert他似乎在使用KeyValuePair
来存储某个东西的旧值和值中的新值。如果你使用的是C#4.0,你应该使用Tuple
而不是KeyValuePair
(除非你显然是在回收另一本词典的KeyValuePair)在名为“Key”的字段中输入一个值似乎很危险,而且容易出错。结构便宜;为什么不做一个结构替换{public t OldValue{get;private set;}public t NewValue{get;private set;}…
并使用它?有一次,我花了几个小时调试一些代码,其中一些傻瓜决定将矩形的左、顶、宽和高存储在一个结构中,该结构包含名为left、top、right、bottom的字段,因为他太懒了,无法用正确的名称定义一个结构。调试非常困难,因为有一半的名称是错误的。仅此而已如果你把dc.ValuesHis字典的值不是一个字符串
它是一个KeyValuePairNice
。你知道,它仍然是错误的。第二部分应该是KeyValuePairNice!关于使用类而不是字典,你也是对的,这样我前面的问题是:你可能可以使用Tuple类,而不是创建自己的类(如果你像我一样懒惰:))@SaguiItay:是的,Tuple是一个更好的选择,但它仅在.NET 4.0上,其他团队成员仍然安装了VS2008。@Saguiltay,Tuple
的问题与字典
方法的问题类似。如果您在方法中使用它作为实现细节,并且没有人看到它,那么您可能会继续并且使用它。如果你开始将它传递给其他方法使用,那么肯定是时候对它进行类处理了,这样它就可以自己记录它所包含的内容了。tuple.Item1
和tuple.Item2
什么都不告诉我。class.Name
和class.SomeValue
告诉我很多。即使不传递它总的来说,一个类通常是合理的,因为它为6个月后回到代码中的糟糕的维护程序员提供文档,并且不知道作者打算用.Item1
和.Item2
或.Key
,.Value.Key
,.Value
来做什么。不要犹豫使用类,即使是“琐碎”的事情。
foreach( KeyValuePair<string, KeyValuePair<string,string>> kvp in dc )
{
Console.WriteLine(kvp.Key + " " + kvp.Value.Key + " "+ kvp.Value.Value);
}
foreach (var pair in dc)
{
string name = pair.Key;
string oldValue = pair.Value.Key;
string newValue = pair.Value.Value;
// use the values
}