c# - 如何在 C# 中获取一个对象的多个子项的枚举器?

标签 c# enumeration

这是我的课

class EmissionSource:IEnumerable
{
    private Emissions[] emissions = new Emissions[5];
    private Contribution[] contributions = new Contribution[2];

    public EmissionSource()
    {
        emissions[0] = new Emissions(2010, 400, 200, 6);
        emissions[1] = new Emissions(2011, 450, 255, 16);
        emissions[2] = new Emissions(2012, 470, 245, 26);
        emissions[3] = new Emissions(2013, 490, 285, 36);
        emissions[4] = new Emissions(2014, 495, 245, 46);


        contributions[0] = new Contribution(1, "Energy");
        contributions[1] = new Contribution(3, "Industrial Sector");
    }

    public IEnumerator GetEnumerator()
    {
        return emissions.GetEnumerator();
    }

}

在 GetEnumerator 方法中,我使用排放对象将请求委托(delegate)给 System.Array。我在想,我怎样才能遍历其他子项目即贡献,比如

    foreach (Emissions e in source)
    {
        //
    }
    foreach (Contribution e in source)
    {
       //
    }

最佳答案

我能想到的最好的办法就是使用两个不同的属性:

class Main
{
    class X
    {
        private int[] i = new int[5];
        private string[] s = new string[2];

        public X()
        {
            i[0] = 0; i[1] = 1; i[2] = 2; i[3] = 3; i[4] = 4;
            s[0] = "test"; s[1] = "test2";
        }

        public IEnumerable<string> Strings
        {
            get
            {
                return s;
            }
        }

        public IEnumerable<int> Ints
        {
            get
            {
                return i;
            }
        }

    }

    private static void Main(string[] args)
    {
        X x = new X();

        foreach (string s in x.Strings)
        { }

        foreach (int i in x.Ints)
        { }
    }
}

我已经尝试使用 IEnumerable 的通用版本并从 int 和 string 继承,但我无法让它工作,可能是因为通用版本再次从非通用 IEnumerable 继承,使其成为菱形继承树。或许您可以将其作为思想的食粮。

class X : IEnumerable<int>, IEnumerable<string>
{
            private int[] i = new int[5];
            private string[] s = new string[2];

            public X()
            {
                i[0] = 0; i[1] = 1; i[2] = 2; i[3] = 3; i[4] = 4;
                s[0] = "test"; s[1] = "test2";
            }

            public IEnumerator GetEnumerator()
            {
                return i.GetEnumerator();
            }

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

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

关于c# - 如何在 C# 中获取一个对象的多个子项的枚举器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34013844/

相关文章:

c++ - 如何解决编译器枚举重新声明冲突

linq - 这个 linq 查询是否在 for-each 循环的每次迭代中运行?

reflection - Scala:如何知道一个类是否是一个枚举; isInstanceOf[Enumeration] 不起作用

c# - sql 数据库错误 "Must declare the scalar variable"

c# - 当用户(尚未)获得授权时,ASP.NET(3.5,Webforms)无法正确加载 CSS

c# - Azure 移动服务出现错误 - 序列不包含匹配元素

arrays - 覆盖特定数组中的计数(或其他)

vector - 如何通过枚举定义并静态初始化向量索引?

c# - Unity3D C# 随机整数生成器

c# - Xamarin 表格 : Custom Fonts in UWP and Windows 8. 1