当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《投射不同的对象并在同一行中调用方法?》经验,为你挑选了1个好方法。

我有代码:

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



1> Roman Doskoc..:

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

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有