1

首先,我是 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");
        }

但是为什么这不起作用?

怪物.cs

namespace ConsoleSimulation
{
  public class Monster
  {
    public string race = Console.ReadLine();
  }
}

程序.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");
    }
4

1 回答 1

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()类中。

于 2017-10-10T16:16:37.667 回答