Botem Bao
Botem Bao

Reputation: 817

Implementing two generic IEnumerable interfaces with different type parameter

Having code as below, getting a compile error - "... does not implement interface member 'System.Collections.IEnumerable.GetEnumerator()'".

How to implement the non-generic version of GetEnumerator?

public class Giraffe { }
public class Pigeon { }
public class Sample : IEnumerable<Giraffe>, IEnumerable<Pigeon>
{
    IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
    {
        return null;
    }
    IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
    {
        return null;
    }
}

Upvotes: 1

Views: 908

Answers (2)

pushpraj
pushpraj

Reputation: 13669

if I understand your problem correctly, here is a sample how you can implement non-generic Enumerator in your class

public class Sample : IEnumerable<Giraffe>, IEnumerable<Pigeon>
{
    IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
    {
        return null;
    }
    IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
    {
        return null;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return null; //your logic for the enumerator
    }
}

since the generic IEnumerable<T> inherits non-generic IEnumerable so implementing IEnumerable.GetEnumerator would define an implementation for the same.

you may additionally declare the class as public class Sample : IEnumerable, IEnumerable<Giraffe>, IEnumerable<Pigeon> for more clarity

example

public class Sample : IEnumerable, IEnumerable<Giraffe>, IEnumerable<Pigeon>
{
    IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
    {
        return null;
    }
    IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
    {
        return null;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return null; //your logic for the enumerator
    }
}

Upvotes: 1

Tim.Tang
Tim.Tang

Reputation: 3188

Try:

public class Pets :IEnumerable, IEnumerable<Giraffe>, IEnumerable<Pigeon>
        {
            IEnumerator<Giraffe> IEnumerable<Giraffe>.GetEnumerator()
            {
                return null;
            }
            IEnumerator<Pigeon> IEnumerable<Pigeon>.GetEnumerator()
            {
                return null;
            }

            public IEnumerator GetEnumerator()
            {
                throw new NotImplementedException();
            }
        }

Upvotes: 1

Related Questions