C# – Foreach循环仅迭代某些对象
发布时间:2020-12-15 23:41:22 所属栏目:百科 来源:网络整理
导读:我正在学习编程,我不得不创建一个蛇游戏. 在游戏中,蛇有大约5种可能的消耗品,我决定将每种新消耗品都放在消耗品阵列中. 现在我想通过数组迭代foreach循环并执行以下操作: foreach (Apple apple in consumables){ renderer.DrawApple(apple);} 但是当数组中
我正在学习编程,我不得不创建一个蛇游戏.
在游戏中,蛇有大约5种可能的消耗品,我决定将每种新消耗品都放在消耗品阵列中. 现在我想通过数组迭代foreach循环并执行以下操作: foreach (Apple apple in consumables) { renderer.DrawApple(apple); } 但是当数组中有不同的对象,如Apple和SegmentRemover(这是可能的,因为它们继承自Consumable类),然后编译器也会迭代SegmentRemover,并且我得到一个无效的强制转换异常. 我想,因为我在foreach循环中声明我只想迭代Apple对象,它应该工作. 有没有简单的方法来解决这个问题?最好不要使用var或typeof之类的东西,因为我还不允许使用它们. 解决方法
你真正想要的只是那些“可浇铸”到Apple类型的物品.为此使用
OfType<Apple> (使用linq):
foreach (Apple apple in consumables.OfType<Apple>()) { renderer.DrawApple(apple); } 使用 foreach(var item in consumbles) { var apple = item as Apple; if(apple != null) { renderer.DrawApple(apple); } } 然而IMO如果所有这些项目都放在同一个列表中,并且它们都已经从Consumble继承,那么使用多态性的更好的设计是为@dasblinkenlight建议的每种类型的消耗品定义一个绘制方法.并针对每种类型进行特定实施.在SegmentRemover的情况下,它可能是一个空实现,在Apple中它可能会调用渲染器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |