C # Имя "..." не существует в текущем контексте - PullRequest
0 голосов
/ 16 сентября 2018

Я новичок в C # и пытаюсь научиться этому на самых основах, но я застрял на занятиях.Я сделал первый пример на практике, который работает должным образом, но когда я добавляю небольшую сложность, я получаю ошибку:

«Имя« iArcher »не существует в текущем контексте».

Пожалуйста, помогите объяснить, что не так, и предложить правильное (и простое) решение.

Спасибо!

using System;

namespace Units
{
    class Archer
    {
        public int id;
        public int hp;
        public float speed;
        public float attack;
        public float defence;
        public float range;

        public void setProp(int id, int hp, float sp, float at, float de, float ra)
        {
            this.id = id;
            this.hp = hp;
            speed   = sp;
            attack  = at;
            defence = de;
            range   = ra;
        }

        public string getProp()
        {
            string str = "ID        = " + id +      "\n" +
                         "Health    = " + hp +      "\n" +
                         "Speed     = " + speed +   "\n" +
                         "Attack    = " + attack +  "\n" +
                         "Defence   = " + defence + "\n" +
                         "Range     = " + range +   "\n" ;

            return str;
        }

        static void Main(string[] args)
        {
            string input = Console.ReadLine();

            if (input == "create: archer")
            {
                Archer iArcher = new Archer();
                iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
            }

            if (input == "property: archer")
            {
                Console.WriteLine(iArcher.getProp());    // ERROR!
            }
            Console.ReadLine();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

C # имеет области применения.Элемент в области видимости может видеть все в областях, которые его содержат, но внешние области не могут видеть внутри внутренних областей.Вы можете прочитать о областях действия здесь .

. Возьмите свой пример:

if (input == "create: archer")
{
    Archer iArcher = new Archer();
    iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
}

iArcher входит в сферу действия вашего оператора if, поэтому код за пределами этогооператор if не может его увидеть.

Чтобы решить эту проблему, переместите определение или iArcher за пределы оператора if:

Archer iArcher = new Archer();
if (input == "create: archer")
{
    iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
}

if (input == "property: archer")
{
    Console.WriteLine(iArcher.getProp());
}

Обратите внимание, что теперь это оставляет вас с другимпроблема: input не может быть одновременно "create: archer" и "property: archer".

Одним из решений может быть перемещение пользовательского ввода внутри цикла, сохраняя iArcher вне этого цикла:

Archer iArcher = new Archer();
string input = null;

while ((input = Console.ReadLine()) != "exit")
{
    if (input == "create: archer")
    {
        iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
    }
    else if (input == "property: archer")
    {
        Console.WriteLine(iArcher.getProp());
    }
}

Чтобы выйти из цикла, просто введите «exit» в качестве ввода.

0 голосов
/ 16 сентября 2018

Переместить эту строку:

Лучник iArcher = новый Лучник ();

за пределами вашего блока if, и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...