c#foreach循环遍历字典而不提供正确的输出

时间:2017-10-01 03:02:28

标签: c#

Dictionary<string, string> dict = new Dictionary<string,string>();
dict.Add("Hello", "Goodbye");
dict.Add("Morning", "Evening");
dict.Add("Blue", "Red");

foreach(KeyValuePair<string,string> item in dict)
{
    Console.WriteLine("Key = {0}, Value = {1}", dict.Keys, dict.Values);
}
Console.ReadLine();

希望将键和值作为输出,但我得到以下结果:

  

键=   System.Collections.Generic.Dictionary2 + KeyCollection [System.String,System.String]   价值=   System.Collections.Generic.Dictionary2 + ValueCollection [System.String,System.String]   键=   System.Collections.Generic.Dictionary2 + KeyCollection [System.String,System.String]   价值=   System.Collections.Generic.Dictionary2 + ValueCollection [System.String,System.String]   键=   System.Collections.Generic.Dictionary2 + KeyCollection [System.String,System.String]   价值=   System.Collections.Generic.Dictionary2 + ValueCollection [System.String,System.String]

关于朝着正确方向前进的任何建议都会很棒,遵循https://msdn.microsoft.com/en-us/library/bb346997(v=vs.110).aspx

上的文档

3 个答案:

答案 0 :(得分:2)

基本上,您正在迭代一个名为String hexString24 = StringUtils.leftPad(source.getCompany().toString(16), 24, "0"); ObjectId objCompany = new ObjectId(hexString24); 的集合,并且在foreach循环内的迭代过程中,您将dict集合的每个元素都转换为dict变量。您的代码问题item是一个集合,因此您无法像单个元素一样访问它的属性。更好的是你改变你的代码,如

dict

答案 1 :(得分:1)

dictionary.Keysdictionary.Values会返回键或值的集合 Console.WriteLine通过调用.ToString()来格式化值。

所以你得到了你的代码正在做的事情

dict.Keys.ToString()   
// System.Collections.Generic.Dictionary2+KeyCollection[System.String,System.String]

dict.Values.ToString()   
// System.Collections.Generic.Dictionary2+ValueCollection[System.String,System.String]

当您遍历字典时,在每次迭代时,您将获得类型KeyValuePair的实例,其中包含键和对应值。这就是为什么你应该使用迭代项来访问所需的值

foreach(KeyValuePair<string,string> item in dict)
{
    Console.WriteLine("Key = {0}, Value = {1}", item.Key, item.Value);
}

答案 2 :(得分:0)

将您的WriteLine更改为:

 Console.WriteLine("Key = {0}, Value = {1}", item.Key, item.Value);