我收到此错误消息,我无法弄清楚原因!
Error 1 'Exo5Chap12.ShortCollection<T>' does not implement interface member
'System.Collections.IEnumerable.GetEnumerator()'.
'Exo5Chap12.ShortCollection<T>.GetEnumerator()' cannot implement
'System.Collections.IEnumerable.GetEnumerator()' because it does not have the matching
return type of 'System.Collections.IEnumerator'.
E:\MyFolders\Dev\c#\Chapter12\Exo5Chap12\Exo5Chap12\exo5.cs 9 18 Exo5Chap12
以下是具有GetEnumerator()实现的代码。 有什么问题?
public class ShortCollection<T> : IList<T>
{
protected Collection<T> innerCollection;
protected int maxSize = 10;
public IEnumerator<T> GetEnumerator()
{
return (innerCollection as IEnumerator<T>).GetEnumerator();
}
}
答案 0 :(得分:12)
正如其他人所说,您需要实施IEnumerable
以及IEnumerable<T>
。但是,由于IEnumberable<T>
本身实现IEnumerable
这是微不足道的,只需调用您的通用GetEnumerator()
:
public class ShortCollection<T> : IList<T>
{
protected Collection<T> innerCollection;
protected int maxSize = 10;
public IEnumerator<T> GetEnumerator()
{
return innerCollection.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
我假设您有实际添加和删除innerCollection
的方法,因为它们与手头的问题无关,所以只是为了简洁而将它们排除在外。
答案 1 :(得分:4)
IEnumerable
和IEnumerable<T>
是不同的接口,您的代码必须同时实现这两种接口。您的代码仅实现IEnumerable<T>
的GetEnumerator(),而不实现IEnumerable
的GetEnumerator()。您应该考虑安装ReSharper,以便轻松修复此类错误。
答案 2 :(得分:3)
您需要实施更多内容:
public class ShortCollection<T> : IList<T>
{
protected Collection<T> innerCollection;
protected int maxSize = 10;
#region IList<T> Members
public int IndexOf(T item)
{
return innerCollection.IndexOf(item);
}
public void Insert(int index, T item)
{
innerCollection.Insert(index, item);
}
public void RemoveAt(int index)
{
innerCollection.RemoveAt(index);
}
public T this[int index]
{
get
{
return innerCollection[index];
}
set
{
innerCollection[index] = value;
}
}
#endregion
#region ICollection<T> Members
public void Add(T item)
{
innerCollection.Add(item);
}
public void Clear()
{
innerCollection.Clear();
}
public bool Contains(T item)
{
return innerCollection.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
innerCollection.CopyTo(array, arrayIndex);
}
public int Count
{
get { return innerCollection.Count; }
}
public bool IsReadOnly
{
get { return false; }
}
public bool Remove(T item)
{
return innerCollection.Remove(item);
}
#endregion
#region IEnumerable<T> Members
public IEnumerator<T> GetEnumerator()
{
return innerCollection.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return innerCollection.GetEnumerator();
}
#endregion
}
此代码将编译......:)