【发布时间】:2011-03-09 08:17:05
【问题描述】:
我有两个类,GenericList 和SpecificList,其中SpecificList 继承自GenericList。 GenericList 实现 IEnumerable<GenericItem> 和 SpecificList 实现 IEnumerable<SpecificItem>。 SpecificItem 继承自 GenericItem。我必须在GenericList 和SpecificList 中实现GetEnumerator,因为它们实现了IEnumerable<T>。在GenericList 中,很简单,我只返回底层List<T> 的枚举数:
public IEnumerator<GenericItem> GetEnumerator()
{
return genericItemsList.GetEnumerator();
}
但是,在SpecificList 中,它似乎更棘手。将IEnumerator<GenericItem> 转换为IEnumerator<SpecificItem> 似乎有风险,我不知道这是否可行。相反,我做了以下事情:
public new IEnumerator<SpecificItem> GetEnumerator()
{
IEnumerator<GenericItem> enumerator = base.GetEnumerator();
while (enumerator.MoveNext())
{
yield return (SpecificItem)enumerator.Current;
}
}
这编译得很好,一个简单的 MSTest 单元测试调用 SpecificList.GetEnumerator() 似乎表明它有效。但是,ReSharper 在上述方法中突出显示base,并发出以下警告:
通过匿名方法、lambda 表达式、查询表达式或迭代器中的“base”关键字访问 GenericList.GetEnumerator 会导致无法验证的代码
这是我应该担心的事情吗?我应该做些不同的事情吗?
编辑:我使用的是 ReSharper 5.1 Full Edition Pre-Release Build 5.1.1715.35。
另外,我应该停止运行 MSTest 单元测试:我只是按了 Ctrl+R、Ctrl+T 在 Chrome 中重新加载页面...
【问题讨论】:
标签: c# iterator resharper ienumerable warnings