不能在 if() 中使用来自 public class 的静态变量

Can't use static variables from public class in if()

首先,我是 C# 的新手!

我需要获得一个特定的控制台输入,并且我需要在另一个 class 中包含变量。所以我有 Monster.csProgram.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()