在C#中返回不明确的对象

时间:2015-11-10 19:33:59

标签: c# arrays object

我目前正在大学的第一年制作游戏。我有四个敌人物体(兽人,精灵,地精和爬行动物)我想根据玩家当前所处的等级和空间来创建每个敌人的物体并返回该特定敌人的物体阵列。我得到错误"名字"敌人"在当前上下文中不存在"。提前谢谢。

public Object[] level(int lev, int room){
                int enemiesToCreate = 2;
                enemiesToCreate += lev += room;
                if (lev == 1)
                {
                    Goblen[] enemies = new Goblen[enemiesToCreate];
                }
                else if (lev == 2)
                {
                    Orc[] enemies = new Orc[enemiesToCreate];
                }
                else if (lev == 3)
                {
                    Elf[] enemies = new Elf[enemiesToCreate];
                }
                else if (lev == 4)
                {
                    Reptilian[] enemies = new Reptilian[enemiesToCreate];
                }

                // error here
                return enemies;

            }

2 个答案:

答案 0 :(得分:1)

您必须在enemies块之外定义if。当您用{}括号括起来时,它基本上会创建一个额外的范围级别,通常称为块,外部级别将看不到。例如,以下内容不起作用:

if (lev == 1)
{
  Goblen[] enemies = new Goblen[enemiesToCreate];
}

return enemies;

但是,如果我们在if块之外声明敌人,则return语句将能够"查看"声明。例如:

object[] enemies;

if (lev == 1)
{
   enemies = new Goblen[enemiesToCreate];
}

return enemies;

请注意,由于您使用的是不同的返回类型,因此必须为返回变量使用公共基类型。 object始终有效,但更具体的内容更可取。

此外,在这种特殊情况下,最好只是完全跳过return变量,直接从if语句中返回,如下所示:

public Object[] level(int lev, int room){
  int enemiesToCreate = 2;

  enemiesToCreate += lev += room;

  if (lev == 1)
  {
    return new Goblen[enemiesToCreate];
  }
  else if (lev == 2)
  {
    return new Orc[enemiesToCreate];
  }
  ...
  throw new Exception("Unknown enemy type");
}

答案 1 :(得分:1)

使类if继承自抽象类或接口。在{{1}}语句之外声明该类型的敌人。可能你会发现为你的案例奖励抽象工厂设计模式的实现。