【问题标题】:Exposing foreach on a class containing a dictionary在包含字典的类上公开 foreach
【发布时间】:2013-10-15 15:23:58
【问题描述】:
class C_SQLSerResLibrary: IEnumerable<KeyValuePair<C_SQLServer, String>>
{
    private Dictionary<C_SQLServer, String> m_dicSQLResLibrary;
    // ...
    public IEnumerator<KeyValuePair<CSQLServer, String>> GetEnumerator()
    {
        return(IEnumerator<KeyValuePair, String>>) m_dicSQLResLibrary. GetEnumerator();
    }
    // ... 
 }

我正在尝试以只读方式公开字典上的 foreach。

目前我收到一个错误 CS0738,告诉我该类没有实现接口成员 System.Collections.IEnumerable.GetEnumerator() 返回类型不匹配。

【问题讨论】:

  • 返回类型似乎不同。这是一个错字吗? C_SQLServer 和 CSQLServer
  • 是的,这是我 Ryan 的一个错字。不错的收获。

标签: c# dictionary foreach


【解决方案1】:

IEnumerable&lt;T&gt; 实现 IEnumerable 非泛型接口。它也有一个IEnumerator GetEnumerator() 方法,你也必须实现它才能编译。

试试这个

class C_SQLSerResLibrary: IEnumerable<KeyValuePair<C_SQLServer, String>>
{
    private Dictionary<C_SQLServer, String> m_dicSQLResLibrary;
    public IEnumerator<KeyValuePair<CSQLServer, String>> GetEnumerator()
    {
        return m_dicSQLResLibrary.GetEnumerator();
    }
    IEnumerator IEnumerable.GetEnumerator()//you missed this
    {
        return this.GetEnumerator();
    }
 }

【讨论】:

  • 我认为C风格的演员表可以省略,不是吗?
  • @Seb 那是原始代码。这肯定是多余的。感谢您的指点,我将编辑我的答案。
  • 感谢负载....我之前添加了它,但更多的编译器错误。由于您加强了我开始查看依赖项,发现 IEnumerator 不是 System.Collections.Generic 而是 Systems.Collections。在此处添加以加强我并提醒其他人。再次感谢 ole C 编码器。
猜你喜欢
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 2019-01-13
  • 2022-11-15
  • 1970-01-01
  • 2020-01-16
  • 2014-05-08
  • 2012-10-17
相关资源
最近更新 更多