 <p>The compiler is picking the <code>IEnumerator&lt;int&gt; GetEnumerator</code> method by following the rules in 8.8.4 of the C# language specification which <em>first</em> looks for an accessible <code>GetEnumerator()</code> method on the <code>BarList</code> type. The only one of those which is available is the one returning <code>IEnumerator&lt;int&gt;</code>.</p> <p>If you had made <em>that</em> method use explicit interface implementation as well, then it would have gone onto the later stages of section 8.8.4, which states that if there is more than one type T such that there is an implicit conversion from the expression type (<code>BarList</code> here) to <code>IEnumerable&lt;T&gt;</code> then an error is produced.</p> <p>I would say this <em>is</em> a confusing design - I would probably add properties or methods to retrieve appropriate "views" on the data.</p>