#pragma warning disable 168 using System; using System.Collections; namespace System { extension Array1 { public static Self operator+(Self lhs, Self rhs) where T : IDisposable { return lhs; } } } namespace IDETest { class Generics { public void Method1(T val) where T : Array { } public void Method2(T val, T2 val2) { Method1(val2); //FAIL 'T', declared to be 'T2' } public void Method3(ref TFoo[] val) { var res = val + val; //FAIL } public void Method4(ref TFoo[] val) where TFoo : IDisposable { var res = val + val; } interface IFaceA { public void MethodA(T val, M1 val2, delegate T (M1 arg) val3); } class ClassA : IFaceA<(T1, T2)> //FAIL 'IDETest.Generics.ClassA' does not implement interface member 'IDETest.Generics.IFaceA<(T1, T2)>.MethodA((T1, T2) val, M1 val2, delegate (T1, T2)(M1 arg) val3)' { void MethodA(int a) { } void MethodB() { function void() f = => MethodA; //FAIL Method 'IDETest.Generics.ClassA.MethodA(int a)' does not match function 'function void()' } } static void Method5() where A : IEnumerable { } static void Method6() { Method5(); //FAIL Generic argument 'A', declared to be 'E' for 'IDETest.Generics.Method5()', must implement 'System.Collections.IEnumerable' } interface IFaceB { void MethodA0(); } extension IFaceB { void MethodA1(); } class ClassB : IFaceB //FAIL 'IDETest.Generics.ClassB' does not implement interface member 'IDETest.Generics.IFaceB.MethodA0()' { } extension ClassB { } } }