c#-通过switch语句处理对象的集合

我需要一个玩家装备一个物品,如下所示:

IEquiptable是一个接口.

这个方法在我的播放器类中.

public void equip(IEquiptable equipable) 
    {
        switch (equipable.GetType())
        {
            case equipable is Weapons:
                this.weapon = equipable;
                break;

            case equipable is Shield:
                this.shield = equipable
                break;

                //etc etc..
        }
    }

我收到一个错误,指出开关运算必须是bool,char,string,integral,enum或对应的可为null的类型.

我可以通过在我的每个武器/盾牌类中使用一个equit方法来处理它,并将我的玩家类作为参数传递.但是我觉得这有点不合逻辑,因为玩家应该装备一件物品,而不是装备自己的物品.

解决方法:

您已经有一个接口,所以为什么不使用它呢?

public interface IEquipable
{
    void EquipOn( Player player );
}

public class Shield : IEquipable
{
    public void EquipOn( Player player )
    {
        player.shield = this;
    }
}

public class Weapons : IEquipable
{
    public void EquipOn( Player player )
    {
        player.weapon = this;
    }
}

你的代码变成

public void equip(IEquiptable equipable) 
{
   equipable.EquipOn( this ); 
}

实际上,您甚至不需要此方法,因为它已简化为仅将其工作转发到适当的类.每当您有IEquipable时,您只需调用其EquipOn方法.

上一篇:P4


下一篇:python两个 list 获取交集,并集,差集的方法