Строковая ссылка - PullRequest
       1

Строковая ссылка

0 голосов
/ 14 января 2012

При создании моей игры на c # я столкнулся с проблемой создания метода, который берет строку и сравнивает ее с другой строкой.

if (Player.GetCurrentRoom() == Level.Rooms[2,0]
    && string.Equals(TextMethods.ExtractArgument(input), "fortune"))
{
  Level.Rooms[2, 0].AddExit("north");
}

Здесь говорится, что ввод не распознается, аЯ определил его в другом классе как

public static string ExtractInput(string line)
{
  string input = TextMethods.ExtractArgument(line);
  return input;
}

edit: вот метод extractArgument:

public static string ExtractArgument(string line)
{
  int index = line.IndexOf(' ');
  if (index == -1)
    return "";
  else
    return line.Substring(index + 1, line.Length - index - 1);
}

Есть идеи, почему это происходит?

Ответы [ 2 ]

3 голосов
/ 14 января 2012

Во втором коде вы показываете локальную переменную с именем input внутри метода. Нет никакой возможности увидеть эту переменную вне метода, в котором она объявлена.

Если вы хотите, чтобы он работал так, как вы хотите, вы должны объявить свойство внутри второго класса:

public class Class2
{
    public static string Input { get; set; }

    public static string ExtractInput(string line)
    {
        return TextMethods.ExtractArgument(line);
    }
}

затем используйте его в первом коде:

if (Player.GetCurrentRoom() == Level.Rooms[2,0]
        && string.Equals(TextMethods.ExtractArgument(Class2.Input), "fortune"))
{
    Level.Rooms[2, 0].AddExit("north");
}
1 голос
/ 14 января 2012

Если у вас есть локальная переменная с именем input в одном методе, вы не можете получить к ней прямой доступ из другого метода. После завершения метода, содержащего локальную переменную, локальная переменная больше не существует!

Возможно, вас смущают такие языки, как JavaScript, где вы можете объявить глобальную переменную в одном методе, а затем использовать ее где-нибудь еще. Это не то, что здесь происходит.

Если вы хотите работать с результатом ExtractInput(), вы можете сохранить его в локальной переменной в вашем текущем методе:

string line = …;

string input = TextMethods.ExtractInput(line);

if (Player.GetCurrentRoom() == Level.Rooms[2,0]
    && TextMethods.ExtractArgument(input) == "fortune")
{
  Level.Rooms[2, 0].AddExit("north");
}

Если вы хотите работать с результатом ExtractInput() в течение более длительного времени (не только одним способом), вы можете сохранить его в поле.

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