不能在if()中使用公共类的静态变量

时间:2017-10-10 15:37:38

标签: c# mono rider

首先,我是C#的新手!

我需要获得一个特定的控制台输入,我需要在另一个类中使用该变量。所以我有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");
    }

1 个答案:

答案 0 :(得分:1)

此代码存在一些问题。我假设你不希望程序不断地从控制台读取,就像现在使用该字段时一样。你需要在类的开头提供一个构造函数来分配race的值,如下所示:

Monster() { this.race = Console.ReadLine(); }

或者你必须从调用代码中分配它。为了执行此操作,然后访问其值,您需要该类的实例。你可以这样做:

Monster newMonster = new Monster(); newMonster.race = Console.ReadLine(); //only if no constructor

然后你可以继续在给定的表达式中使用race的值,例如:

if (newMonster.race == "1"){//code here}

但是,如果你不需要字段的类特定值,即在类的实例中值不会改变,你可以像@Backs建议的那样,将race声明为静态字段,如下所示:

public static string race;

您根本不需要该类的newMonster实例。相反,您只需在调用代码中使用以下内容即可。

Monster.race = Console.ReadLine(); if(Monster.race == "1"){//code here}

请注意,您的字符串声明仍然无法将其指定为类中的Console.ReadLine()