我有代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道这样的事情是否可行?
我想在一行中做到这一点.这就是我的想法:
(Enemy)o => Update(time, player);
Run Code Online (Sandbox Code Playgroud)
我知道这很愚蠢,但我想要类似的东西.将播放器作为参数的方法对于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);
}
Run Code Online (Sandbox Code Playgroud)
对于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);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你有更少的代码行,但你投了两次.
你只能投一次:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |