dotnet/roslyn

Generic interface inheritance conflict with extension method

Open

#16.843 aperta il 31 gen 2017

Vedi su GitHub
 (11 commenti) (0 reazioni) (0 assegnatari)C# (4257 fork)batch import
Area-CompilersBugConcept-Diagnostic Clarityhelp wanted

Metriche repository

Star
 (20.414 star)
Metriche merge PR
 (Merge medio 6g 17h) (256 PR mergiate in 30 g)

Descrizione

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

Guida contributor