我有一个实现IList
的泛型类public class ListBase<T>: IList<T>, IListBase{
IEnumerator<T> GetEnumerator(){ ....
System.Collections.IEnumerator GetEnumerator(){ return GetEnumerator();}
}
IListBase是我用来访问此类上的方法的接口,用于我在运行时不知道T类型的情况。
我需要通过这个IListBase接口实现第二个Enumerator,它将迭代我的类的成员并将它们作为所有成员将实现的基类型返回。
我已经尝试让IListBase实现我的特定枚举器:
public interface IListBase: IEnumerable<MemberBaseType> { ....
但是由于T和MemberBaseType在某些情况下可能相同,所以这会爆发。即使将枚举器成员添加到接口然后使用显式声明也无法解决此问题。
然后我尝试添加另一个方法来调用获取特定的IEnumerator,但编译器然后抱怨没有找到一个公共的GetEnumerator方法来使用这个类型......
有关添加此辅助枚举器的任何建议,以便它们不会相互冲突吗?
答案 0 :(得分:0)
有两个同一级别的 执行不同的事情是(IMO)一个坏主意。你可以强制它,但是只要有人投射你的类型(特别是如果投射到非通用界面),那么他们将会在很大程度上猜测。
我建议(而不是)通过属性提供此功能,例如.Members
,其中.Members
提供此枚举。然后没有意图的歧义,也没有编译器的不快乐。所以我可以使用:
foreach(var member in list.Members) { /* add columns */ }
foreach(var item in list) { /* add rows */ }
您可能还会考虑ITypedList
,这可能会有一些相关性,特别是如果您想要数据绑定到您的列表(如果T
本身定义所有内容,则不需要这样做)。
简而言之:
public interface IListBase {
IEnumerable<MemberBaseType> Members {get;}
}