dotnet/roslyn

Generic interface inheritance conflict with extension method

Open

#16 843 ouverte le 31 janv. 2017

Voir sur GitHub
 (11 commentaires) (0 réactions) (0 assignés)C# (4 257 forks)batch import
Area-CompilersBugConcept-Diagnostic Clarityhelp wanted

Métriques du dépôt

Stars
 (20 414 stars)
Métriques de merge PR
 (Merge moyen 6j 17h) (256 PRs mergées en 30 j)

Description

I write 2 class inherit each other and each implement IEnumerable with difference generic type

Like this

public class A : IEnumerable<object>
{
    public IEnumerator<object> GetEnumerator()
    {
        throw new NotImplementedException();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

public class B : A, IEnumerable<string>
{
    public new IEnumerator<string> GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

////

	static void Test()
	{
		var a = new A();
		var b = new B();

		a.Select((item,i) => i);
		b.Select((item,i) => i);
	}

Instance from A work fine but B cannot use all generic function in System.Linq

image

It seem B was seen by compiler that it is just IEnumerable but not IEnumerable<string>. It still have Cast<> and OfType<> exposed

image

Guide contributeur