gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:32:23 26 4
gpt4 key购买 nike

我需要让玩家装备一个元素,如下所示:

IEquiptable 是一个接口(interface)。

这个方法在我的 player 类中。

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..
}
}

我得到一个错误,switch 表达式必须是 bool、char、string、integral、enum 或相应的可为 null 的类型。

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

最佳答案

您已经有了一个界面,为什么不利用它呢?

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 方法即可。

关于c# - 通过 switch 语句处理对象集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com