不能在 if() 中使用来自 public class 的静态变量
Can't use static variables from public class in if()
首先,我是 C# 的新手!
我需要获得一个特定的控制台输入,并且我需要在另一个 class 中包含变量。所以我有 Monster.cs
和 Program.cs
源文件。
所以这有效(仅 Program.cs
):
string race = Console.ReadLine();
if (race == "1")
{
Console.WriteLine("Typed 1");
}
else if (race == "2")
{
Console.WriteLine("Typed 2");
}
else if (race == "3")
{
Console.WriteLine("Typed 3");
}
else
{
Console.WriteLine("Typed something wrong");
}
但是为什么这不起作用?
Monster.cs
namespace ConsoleSimulation
{
public class Monster
{
public string race = Console.ReadLine();
}
}
Program.cs
string race = Console.ReadLine();
if (Monster.race == "1")
{
Console.WriteLine("Typed 1");
}
else if (Monster.race == "2")
{
Console.WriteLine("Typed 2");
}
else if (Monster.race == "3")
{
Console.WriteLine("Typed 3");
}
else
{
Console.WriteLine("Typed something wrong");
}
这段代码有几个问题。我假设您不希望程序在使用该字段时不断地从控制台读取,就像它现在正在做的那样。您可能需要在 class 的开头提供一个构造函数来分配 race 的值,如下所示:
Monster()
{
this.race = Console.ReadLine();
}
否则您必须从调用代码中分配它。为了做到这一点,然后访问它的值,您需要一个 class 的实例。你可以这样做:
Monster newMonster = new Monster();
newMonster.race = Console.ReadLine(); //only if no constructor
然后您可以继续在给定的表达式中使用 race 的值,例如:
if (newMonster.race == "1"){//code here}
但是,如果您不需要 class 字段的特定值,即在 class 的各个实例中该值不会改变,您可以按照@Backs 的建议,声明 race像这样成为静态字段:
public static string race;
然后您将根本不需要 class 的 newMonster
实例。相反,您可以简单地在调用代码中使用以下内容。
Monster.race = Console.ReadLine();
if(Monster.race == "1"){//code here}
请注意,您的字符串声明仍然无法在 class.
中将其指定为 Console.ReadLine()
首先,我是 C# 的新手!
我需要获得一个特定的控制台输入,并且我需要在另一个 class 中包含变量。所以我有 Monster.cs
和 Program.cs
源文件。
所以这有效(仅 Program.cs
):
string race = Console.ReadLine();
if (race == "1")
{
Console.WriteLine("Typed 1");
}
else if (race == "2")
{
Console.WriteLine("Typed 2");
}
else if (race == "3")
{
Console.WriteLine("Typed 3");
}
else
{
Console.WriteLine("Typed something wrong");
}
但是为什么这不起作用?
Monster.cs
namespace ConsoleSimulation
{
public class Monster
{
public string race = Console.ReadLine();
}
}
Program.cs
string race = Console.ReadLine();
if (Monster.race == "1")
{
Console.WriteLine("Typed 1");
}
else if (Monster.race == "2")
{
Console.WriteLine("Typed 2");
}
else if (Monster.race == "3")
{
Console.WriteLine("Typed 3");
}
else
{
Console.WriteLine("Typed something wrong");
}
这段代码有几个问题。我假设您不希望程序在使用该字段时不断地从控制台读取,就像它现在正在做的那样。您可能需要在 class 的开头提供一个构造函数来分配 race 的值,如下所示:
Monster()
{
this.race = Console.ReadLine();
}
否则您必须从调用代码中分配它。为了做到这一点,然后访问它的值,您需要一个 class 的实例。你可以这样做:
Monster newMonster = new Monster();
newMonster.race = Console.ReadLine(); //only if no constructor
然后您可以继续在给定的表达式中使用 race 的值,例如:
if (newMonster.race == "1"){//code here}
但是,如果您不需要 class 字段的特定值,即在 class 的各个实例中该值不会改变,您可以按照@Backs 的建议,声明 race像这样成为静态字段:
public static string race;
然后您将根本不需要 class 的 newMonster
实例。相反,您可以简单地在调用代码中使用以下内容。
Monster.race = Console.ReadLine();
if(Monster.race == "1"){//code here}
请注意,您的字符串声明仍然无法在 class.
中将其指定为Console.ReadLine()