【问题标题】:Generic Dictionary - Getting Conversion Error通用字典 - 出现转换错误
【发布时间】:2010-06-17 13:17:36
【问题描述】:

以下代码给了我一个错误:

        // GetDirectoryList() returns Dictionary<string, DirectoryInfo>
        Dictionary<string, DirectoryInfo> myDirectoryList = GetDirectoryList();

        // The following line gives a compile error
        foreach (Dictionary<string, DirectoryInfo> eachItem in myDirectoryList)

它给出的错误如下:

Cannot convert type 'System.Collections.Generic.KeyValuePair<string,System.IO.DirectoryInfo>' to 'System.Collections.Generic.Dictionary<string,System.IO.DirectoryInfo>’

我的问题是:它为什么要尝试执行这种转换?我不能在这种类型的对象上使用 foreach 循环吗?

【问题讨论】:

    标签: c# generics dictionary


    【解决方案1】:

    应该是:

    foreach (KeyValuePair<string, DirectoryInfo> eachItem in myDirectoryList)
    

    字典不包含其他字典,它包含键和值对。

    【讨论】:

      【解决方案2】:

      Dictionary&lt;string, DirectoryInfo&gt;

      实现

      IEnumerable&lt;KeyValuePair&lt;string, DirectoryInfo&gt;&gt;

      这意味着foreach循环正在循环KeyValuePair&lt;string, DirectoryInfo&gt;对象:

      foreach(KeyValuePair<string, DirectoryInfo> kvp in myDirectoryList)
      {
      }
      

      这也是为什么任何 IEnumerable 扩展方法也将始终与 KeyValuePair 对象一起使用的原因:

      // Get all key/value pairs where the key starts with C:\
      myDirectoryList.Where(kvp => kvp.Key.StartsWith("C:\\"));
      

      【讨论】:

        【解决方案3】:

        存储的项目不是字典,而是KeyValuePair:

            // GetDirectoryList() returns Dictionary<string, DirectoryInfo>
            Dictionary<string, DirectoryInfo> myDirectoryList = GetDirectoryList();
        
            // The following line gives a compile error
            foreach (KeyValuePair<string, DirectoryInfo> eachItem in myDirectoryList)
        

        【讨论】:

          【解决方案4】:

          你必须使用:

          Dictionary<string, DirectoryInfo> myDirectoryList = GetDirectoryList();
          foreach (KeyValuePair<string, DirectoryInfo> itemPair in myDirectoryList) {
              //do something
          }
          

          【讨论】:

            【解决方案5】:

            我认为上面的许多人已经回答了为什么会出现错误的问题,即 Dictionary 存储 KeyValuePairs 而不存储 Dictionary。为了阻止像您遇到的小错误,我建议您在开发中使用新语法。

            foreach (var eachItem in myDirectoryList)
            

            var 的类型将从 myDirectoryList 中推断出来,您不会遇到同样的问题。此外,如果您决定更改 myDirectoryList 的类型并且其子元素中的属性相同,您的代码仍然可以编译。

            【讨论】:

              【解决方案6】:

              通过 foreach 您迭代字典的每个项目,然后您应该定义字典保存的数据类型

              KeyValuePair<string, DirectoryInfo>
              

              而不是字典的类型。 如此正确的方式:

              foreach (KeyValuePair<string, DirectoryInfo> eachItem in myDirectoryList)   
              

              字典是泛型类型,所以不需要装箱和拆箱。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-03-30
                • 2011-08-03
                • 1970-01-01
                • 2016-06-14
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多