字符串引用问题

时间:2012-01-14 15:59:28

标签: c# string

在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;
}

编辑:这是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 个答案:

答案 0 :(得分:3)

在第二个代码中,您将在方法中显示名为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 :(得分:1)

如果在一个方法中有一个名为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()的结果更长时间(不只是在一种方法中),则可以将其存储在字段中。