投射不同的对象并在同一行中调用方法?

Emi*_*ily 6 c#

我有代码:

        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对象是唯一的.我必须解析才能打电话给它.

Rom*_*och 7

您可以使循环更简单(如果您使用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)