我有代码:
foreach(var o in objects) { o.Update(time); if(o is Portal) { var a = (Portal)o; a.Interact(ref player, player.Interact); } else if(o is Enemy) { var e = (Enemy)o; e.Update(time, player); } }
我不知道这样的事情是否可行?
我想在一行中做到这一点.这就是我的想法:
(Enemy)o => Update(time, player);
我知道这很愚蠢,但我想要类似的东西.将播放器作为参数的方法对于Enemy对象是唯一的.我必须解析才能打电话给它.
您可以使循环更简单(如果您使用C#6或更高版本):
foreach(var o in objects) { o.Update(time); (o as Portal)?.Interact(ref player, player.Interact); (o as Enemy)?.Update(time, player); }
对于C#5或更低版本,您应该使用:
foreach(var o in objects) { o.Update(time); if (o is Portal) { ((Portal)o).Interact(ref player, player.Interact); } else if(o is Enemy) { ((Enemy)o).Update(time, player); } }
在这种情况下,你有更少的代码行,但你投了两次.
你只能投一次:
foreach(var o in objects) { o.Update(time); var e = o is Portal; if (e != null) { e.Interact(ref player, player.Interact); } else { ((Enemy)o).Update(time, player); } }