Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何循环浏览这本词典_C# - Fatal编程技术网

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 
}