c#foreach循环通过字典迭代不给出正确的输出


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

<< <</div>

基本上您是在迭代一个名为 dict的集合,在" foreach循环"内部迭代期间,您将dict集合的每个元素都带到item变量。代码的问题是dict是一个集合,因此您无法像单个元素那样访问其属性。更好地更改代码,例如

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

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

将您的写入线更改为:

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

最新更新