【问题标题】:Can't implement IEnumerable<dynamic>, probably doing something I shouldn't无法实现 IEnumerable<dynamic>,可能做了我不应该做的事情
【发布时间】:2018-04-07 07:21:12
【问题描述】:

我正在编写一个用于学习目的的小游戏,但在使用 foreach 使类可迭代时遇到了麻烦。这是许多游戏对象将实现的类,为它们提供&lt;dynamic&gt; 类型的字符串索引数据存储。我有数组样式访问,所以我可以去object["arbitrary-key"] = foo;,但我希望能够foreach(dynamic value in object)。所以看起来我需要实现 IEnumerable,但是这个接口的 &lt;dynamic&gt; 类型似乎有限制。

Error CS1966 'GameObject': cannot implement a dynamic interface 'IEnumerable&lt;dynamic&gt;'

课程如下:

public class GameObject : IEnumerable<dynamic>
{
    public Dictionary<string, dynamic> data = new Dictionary<string, dynamic>();

    public GameObject()
    {

    }

    //Overloads the [] operator to allow array style access
    public dynamic this[string key]
    {
        get { return this.data[key]; }
        set { data[key] = value; }
    }

    //Overloads foreach iteration
    public IEnumerator<dynamic> GetEnumerator()
    {
        foreach (dynamic d in data)
        {
            yield return d;
        }
    }

    IEnumerator<dynamic> IEnumerable<dynamic>.GetEnumerator()
    {
        return GetEnumerator();
    }
}

所以我想我可能是找错了树,需要重新评估这个类。也许我可以让游戏对象实现内置这种行为的东西?还是用其他方式实现我的目标?

【问题讨论】:

标签: c# ienumerable


【解决方案1】:

Scott Chamberlain 为我指明了正确的方向。代码现在看起来也好多了。这是新课程。

public class GameObject
{
    public Dictionary<string, dynamic> data = new Dictionary<string, dynamic>();

    public GameObject()
    {

    }

    //Overloads the [] operator to allow array style access
    public dynamic this[string key]
    {
        get { return this.data[key]; }
        set { data[key] = value; }
    }

    public Dictionary<string, dynamic>.Enumerator GetEnumerator()
    {
        return data.GetEnumerator();
    }
}

我所要做的就是实现一个GetEnumerator() 函数,该函数将我的Dictionary 的枚举数传递给一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2019-01-06
    • 2023-03-26
    • 2011-09-28
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多