if (!TypeManager.IsGenericType (mi.ReturnType))
continue;
- Report.SymbolRelatedToPreviousError(t);
+ Report.SymbolRelatedToPreviousError (t);
Report.Error(1640, loc, "foreach statement cannot operate on variables of type `{0}' " +
"because it contains multiple implementation of `{1}'. Try casting to a specific implementation",
TypeManager.CSharpName (t), TypeManager.CSharpSignature (mi));
}
// Always prefer generics enumerators
- if (TypeManager.IsGenericType(mi.ReturnType))
- continue;
-
- Report.SymbolRelatedToPreviousError (result);
- Report.SymbolRelatedToPreviousError (mi);
- Report.Warning (278, 2, loc, "`{0}' contains ambiguous implementation of `{1}' pattern. Method `{2}' is ambiguous with method `{3}'",
- TypeManager.CSharpName (t), "enumerable", TypeManager.CSharpSignature (result), TypeManager.CSharpSignature (mi));
+ if (!TypeManager.IsGenericType (mi.ReturnType)) {
+ Report.SymbolRelatedToPreviousError (result);
+ Report.SymbolRelatedToPreviousError (mi);
+ Report.Warning (278, 2, loc, "`{0}' contains ambiguous implementation of `{1}' pattern. Method `{2}' is ambiguous with method `{3}'",
+ TypeManager.CSharpName (t), "enumerable", TypeManager.CSharpSignature (result), TypeManager.CSharpSignature (mi));
+ return false;
+ }
}
result = mi;
tmp_move_next = move_next;
--- /dev/null
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+interface ITest : IEnumerable<int> {
+}
+
+class Test : ITest {
+ IEnumerator IEnumerable.GetEnumerator () { throw new Exception (); }
+ IEnumerator<int> IEnumerable<int>.GetEnumerator () { yield break; }
+}
+
+class M {
+ static void Main ()
+ {
+ ITest foo = new Test ();
+ foreach (int i in foo)
+ Console.WriteLine (i);
+ }
+}