views:

482

answers:

2

I have a class (ClassA) that has a IEnumerable property. I then has another class (ClassB) that has the same property. They are sharing an interface (InterfaceA). The ClassB is basically a container class for multiple ClassA's. How to I implement the property for ClassB.

interface InterfaceA
{
    IEnumerable<int> MyInts
    {
        get;
    }
}

class ClassA : InterfaceA
{
    public IEnumerable<int> MyInts
    {
        get;
        private set;
    }
}

class ClassB : InterfaceA
{
    ClassA[] classAs = new ClassA[10];
    public IEnumerable<int> MyInts
    {
        get
        {
            //What goes here ?
            classAs.SelectMany(classA => classA.MyInts);
        }

    }
}

I tried using a LINQ select statement but that doesn't work.

Edit: Looks like I didn't look hard enough. The answer is here in this question. http://stackoverflow.com/questions/1063234/how-do-i-aggregate-multiple-ienumerables-of-t

Edit 2: Include the example code that worked for me, incase anyone else needs it.

+2  A: 
        public IEnumerable<int> MyInts
        {
            get
            {
                foreach (ClassA c in classAs)
                {
                    foreach (int i in c.MyInts)
                    {
                        yield return i;
                    }
                }
            }

        }
CD
+3  A: 

Just adding my answer, so this doesn't go unanswered.

classAs.SelectMany(classA => classA.MyInts);

Found this from this question.

Robin Robinson