我正在收集,实施IEnumerable
明确,并试图从内重复它:警告 - 未实现“集合”模式
public class MyCollection<T> : IEnumerable<T>, IEnumerable
{
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
IEnumerator<T> IEnumerable<T>.GetEnumerator() => GetEnumerator();
IEnumerator<T> GetEnumerator() { yield return default(T); } // test
public void Test()
{
foreach (var item in this) { } // here is warning
}
}
我收到编译器警告在this
:
警告CS0279'MyCollection'没有实现'collection'模式。 'MyCollection.GetEnumerator()'是静态的或不公开的。
地狱是的,它不公开。为什么它应该是?我可以将其公开,但它不需要foreach
类型之外:
foreach (var item in new MyCollection<string>()) { } // no warning
难道我做错了什么?
叫它别的东西吗? 'GetEnumeratorImpl'?或者只是不使用显式接口实现'IEnumerable .GetEnumerator?' –
@JonSkeet,所以它只是名称编译器? – Sinatr
是的 - 因为'foreach' *中的模式匹配找到* GetEnumerator()'方法,但不能使用它。现在添加一个答案... –