在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);
}
有关为何会发生这种情况的任何想法?
答案 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()
的结果更长时间(不只是在一种方法中),则可以将其存储在字段中。