大佬教程收集整理的这篇文章主要介绍了c# – 将子类的枚举器强制转换为父类的枚举数是错误的吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
简单地把它扔掉是不对的?
这是我的代码:
public Dictionary<Int32,BaseClass> Map { get; private set; } public IEnumerator<BaseClass> GetEnumerator() { return this.Map.Values.GetEnumerator(); } public IEnumerator<IParentClass> IEnumerable<IParentClass>.GetEnumerator() { return this.GetEnumerator(); // ERROR! }
我的问题是,我可以改变这一行:
return this.GetEnumerator();
至:
return (IEnumerator<IParentClass>)this.GetEnumerator();
(没有任何不良副作用)?
一般承认的答案:
我已将功能更改为以下内容(阅读Jon Skeet的帖子后):
IEnumerator<IParentClass> IEnumerable<IParentClass>.GetEnumerator() { return this.Map.Values.Cast<IParentClass>().GetEnumerator(); }
如果你要返回IEnumerable< BaseClass>而不是IEnumerator< BaseClass> (并假设.NEt 3.5)您可以使用Enumerable.Cast – 但您目前需要编写自己的扩展方法,例如
public static IEnumerator<TParent> Upcast<TParent,TChild> (this IEnumerator<TChild> sourcE) where TChild : TParent { while (source.MoveNext()) { yield return source.Current; } }
或者在您的情况下,您可以使用之前的Cast:
return this.Map.Values.Cast<BaseClass>().GetEnumerator();
以上是大佬教程为你收集整理的c# – 将子类的枚举器强制转换为父类的枚举数是错误的吗?全部内容,希望文章能够帮你解决c# – 将子类的枚举器强制转换为父类的枚举数是错误的吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。