C# 具有混合属性的继承类列表
我正在制作一个RPG,并且我使用继承的类设置了项目系统,但是我很难找到一个商店列表的子集,它允许我使用所有类的属性来过滤它们 以下是我遇到的问题的精简版本:C# 具有混合属性的继承类列表,c#,list,linq,inheritance,C#,List,Linq,Inheritance,我正在制作一个RPG,并且我使用继承的类设置了项目系统,但是我很难找到一个商店列表的子集,它允许我使用所有类的属性来过滤它们 以下是我遇到的问题的精简版本: public class GameItem { public string strName; public int intQuantity; public int intItemType; } public class GeneralItem : GameIt
public class GameItem
{
public string strName;
public int intQuantity;
public int intItemType;
}
public class GeneralItem : GameItem
{
public int intTargetType;
}
public class EquipmentItem : GameItem
{
public int intAttackPower;
public int intDefensePower;
public int intEquipmentType;
public bool blnEquippableByPlayer1;
}
private void GetShopItems()
{
Items.Add(new GeneralItem() { strName = "Healing Potion", intItemType = 2, intQuantity = 10, intTargetType = 0 });
Items.Add(new EquipmentItem() { intItemType = 0, intEquipmentType = 0, blnEquippableByPlayer1 = true, strName = "Sword", intQuantity = 1, intAttackPower = 10, intDefensePower = 2 });
Items.Add(new EquipmentItem() { intItemType = 0, intEquipmentType = 1, blnEquippableByPlayer1 = false, strName = "Armor", intQuantity = 1, intAttackPower = 10, intDefensePower = 2 });
//cannot convert GeneralItem to GameItemEquipment
List<GameItem> ShopItems = Items.Where(x => x.intQuantity > 0 && ((EquipmentItem)x).blnEquippableByPlayer1).ToList();
}
公共类游戏项
{
公共字符串strName;
公共数量;
公共int初始化类型;
}
公共类通用项:GameItem
{
公共int INTTARGETYPE;
}
公共类装备物品:游戏物品
{
公共int接入电源;
公共权力;
公共int智能设备类型;
公共图书馆blnEquippableByPlayer1;
}
私有void GetShopItems()
{
添加(新的GeneralItem(){strName=“治疗药剂”,intItemType=2,intQuantity=10,intTargetType=0});
添加(新设备项(){intItemType=0,intEquipmentType=0,blnEquippableByPlayer1=true,strName=“Swarm”,intQuantity=1,intAttackPower=10,intDefensePower=2});
添加(新设备项(){intItemType=0,intEquipmentType=1,blnEquippableByPlayer1=false,strName=“Armor”,intQuantity=1,intAttackPower=10,intDefensePower=2});
//无法将GeneralItem转换为GameItemEquipment
列出ShopItems=Items.Where(x=>x.intQuantity>0&((设备项)x).blnEquippableByPlayer1.ToList();
}
我之所以需要这样做,是因为我想在商店中显示所有商品,而不考虑其类型。由于不是所有物品都是装备,当它到达治疗药剂时会失败。你必须首先检查物品是否是装备:
.Where(x => x.intQuantity > 0 && (x is not EquipmentItem || (x as EquipmentItem).blnEquippableByPlayer1))
话虽如此,我认为该商品本身可以控制是否可用于购物:
在GameItem
中:
public virtual bool IsAvailableInShop() => intQuantity > 0;
public override bool IsAvailableInShop()
=> base.IsAvailableInShop() && blnEquippableByPlayer1;
在设备项中
:
public virtual bool IsAvailableInShop() => intQuantity > 0;
public override bool IsAvailableInShop()
=> base.IsAvailableInShop() && blnEquippableByPlayer1;
然后
var ShopItems = Items.Where(x => x.IsAvailableInShop());
您必须首先检查项目是否为设备:
.Where(x => x.intQuantity > 0 && (x is not EquipmentItem || (x as EquipmentItem).blnEquippableByPlayer1))
话虽如此,我认为该商品本身可以控制是否可用于购物:
在GameItem
中:
public virtual bool IsAvailableInShop() => intQuantity > 0;
public override bool IsAvailableInShop()
=> base.IsAvailableInShop() && blnEquippableByPlayer1;
在设备项中
:
public virtual bool IsAvailableInShop() => intQuantity > 0;
public override bool IsAvailableInShop()
=> base.IsAvailableInShop() && blnEquippableByPlayer1;
然后
var ShopItems = Items.Where(x => x.IsAvailableInShop());
我实施了你的两个建议,效果非常好,非常感谢。我实施了你的两个建议,效果非常好,非常感谢。