c# - 随机项目生成器中的“名称在此上下文中不存在”错误
问题描述
目标是创建一个随机项目生成器,在本例中是药水。一切正常,直到我尝试使随机选择的药水类型实际影响它们增加的统计数据,我所遵循的指南没有超过。
错误表明在此上下文中不存在诸如 HEALTH 和 ENERGY 之类的名称,以及显示“无法将类型 'void' 隐式转换为 'BasePotion.PotionTypes'”的名称
我正在按照指南创建一个 rpg 来尝试学习 c#。到目前为止,我一直在关注它,但决定扩展我们正在做的代码。我最初在自己的函数中有 if 语句,但这给出了“预期标识符”错误。
private void CreatePotion() {
newPotion = new BasePotion();
newPotion.PotionType = ChoosePotionType();
newPotion.ItemName = newPotion.PotionType.ToString() +" POTION";
newPotion.ItemID = Random.Range(1,100);
if (newPotion.PotionType == HEALTH) {
newPotion.Stamina = Random.Range(1,11);
newPotion.Endurance = Random.Range(1,11);
newPotion.Strength = 0;
newPotion.Intellect = 0;
}
else if (newPotion.PotionType == ENERGY){
newPotion.Stamina = 0;
newPotion.Endurance = 0;
newPotion.Strength = Random.Range(1,11);
newPotion.Intellect = Random.Range(1,11);
}
else if (newPotion.PotionType == STAMINA){
newPotion.Stamina = Random.Range(1,11);
newPotion.Endurance = 0;
newPotion.Strength = 0;
newPotion.Intellect = 0;
}
else if (newPotion.PotionType == ENDURANCE){
newPotion.Stamina = 0;
newPotion.Endurance = Random.Range(1,11);
newPotion.Strength = 0;
newPotion.Intellect = 0;
}
else if (newPotion.PotionType == STRENGTH){
newPotion.Stamina = 0;
newPotion.Endurance = 0;
newPotion.Strength = Random.Range(1,11);
newPotion.Intellect = 0;
}
else if (newPotion.PotionType == INTELLECT){
newPotion.Stamina = 0;
newPotion.Endurance = 0;
newPotion.Strength = 0;
newPotion.Intellect = Random.Range(1,11);
}
}
if 语句是给出错误的行。
我真的不知道复制这个问题需要多少,但这里是它派生的 BasePotion 脚本。
public enum PotionTypes {
HEALTH,
ENERGY,
STRENGTH,
ENDURANCE,
STAMINA,
INTELLECT
}
private PotionTypes potionType;
private int spellEffectID;
public PotionTypes PotionType {
get { return potionType; }
set { potionType = value; }
}
public int SpellEffectID {
get { return spellEffectID; }
set { spellEffectID = value; }
}
我有另一个几乎相同的脚本减去 if 语句以与此相同的方式生成盔甲,并且按预期工作,包括以与我在此脚本中相同的方式分配类型。
我真的无法弄清楚问题是什么,但如果有人有更好的方法来解决这个问题,那也会有帮助。
解决方案
第一个问题是您试图HEALTH
直接从您的班级访问例如BasePosition
。HEALTH
不是您班级的成员,但PotionTypes
您必须通过PotionTypes
like访问它PotionTypes.HEALTH
。
所以PotionTypes.
在每个枚举值前面加上。
例如在
if(newPotion.PotionType == PotionTypes.HEALTH)
对于第二个问题,我们需要知道您的代码ChoosePotionType
显然它被定义为
private void ChoosePotionType()
{
...
}
但为了使用它
newPotion.PotionType = ChoosePotionType();
它必须返回 aPotionType
所以它应该看起来像
private PotionType ChoosePotionType ()
{
...
return PotionType.XY;
}
推荐阅读
- javascript - 如何通过ajax将字节数组从javascript发送到java servlet
- java - Swagger Java 日期格式验证抛出异常
- php - 如何使用“新的 MongoDB\Driver\Manager”驱动程序在 php 中获取集合 {Mongodb} 的列表
- algorithm - 什么是最有效的通用 sin(x) 算法,它的效率如何?
- c# - 如何检查我的电脑是否退出睡眠模式
- time-complexity - while循环内嵌套for循环的时间复杂度
- java - 通过反射使用方法时没有此类方法异常
- java - 过滤List中的对象排列
- >> 使用 Java 8
- sql - 使用 R 对两列进行分组并计算不同的值
- javascript - 远程自动完成功能不起作用 Angucomplete Alt