我有两节课GenericList
and SpecificList
, where SpecificList
继承自GenericList
. GenericList
实施IEnumerable<GenericItem>
and SpecificList
实施IEnumerable<SpecificItem>
. SpecificItem
继承自GenericItem
。我必须实施GetEnumerator
同时GenericList
and SpecificList
因为他们实施IEnumerable<T>
. In GenericList
,这很简单,我只需返回底层的枚举器List<T>
:
public IEnumerator<GenericItem> GetEnumerator()
{
return genericItemsList.GetEnumerator();
}
然而,在SpecificList
,看起来比较棘手。看来投掷有风险IEnumerator<GenericItem>
to 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 会导致无法验证的代码
这是我应该担心的事情吗?我应该做点不同的事情吗?
Edit:我正在使用 ReSharper 5.1 完整版预发布版本 5.1.1715.35。
Also, I should take a break from running MSTest unit tests: I just hit Ctrl+R, Ctrl+T in Chrome to reload the page...