带下划线的静态下划线,不明白?

时间:2019-03-28 18:52:43

标签: c#

编辑***** 我通过在最后添加内容来修复它,该代码允许代码在保持所有内容不变的情况下工作

static void Main(string[] args)
        {
            DisplayMainMenu();
        }

我已经为简单的菜单系统编写了一些代码。如果没有static void Main(string[] args),其余的静态语句将不加下划线,但是如果没有Main行,则什么也没有显示,我对该怎么办感到困惑。

我正在使用的部分代码,但不会显示任何内容:

class Program
{        
    public static class PlayerSelections
    {
        public static int Age;
        public static string Name, Character, GameType, Cup;
    }

    static void DisplayMainMenu()
    {
        int menuChoice;
        Console.WriteLine("************************************************************");
        Console.WriteLine("* Welcome to the Player Selection Menu *");
        Console.WriteLine("************************************************************");
        Console.WriteLine("* 1. Name and Age                                          *");
        Console.WriteLine("* 2. Player Selection                                      *");
        Console.WriteLine("* 3. Game type                                             *");
        Console.WriteLine("* 4. Cup selectiom                                         *");
        Console.WriteLine("* 5. Print out                                             *");
        Console.WriteLine("* 6. Exit                                                  *");
        Console.WriteLine("************************************************************");
        Console.WriteLine("Please specify your menu choice: ");
        string menuChoiceString = Console.ReadLine();
        menuChoice = Convert.ToInt32(menuChoiceString);
        DisplayMainMenuChoice(menuChoice);
    }

    static void DisplayMainMenuChoice(int selection)
    {
        switch (selection)
        {
            case 1:
                Console.WriteLine("You have selected Enter your Name and Age");
                EnterNameAndAge();
                DisplayMainMenu();
                break;
            case 2:
                Console.WriteLine("You have selected the Player Selection Menu");
                PlayerSelectionMenu();
                break;
            case 3:
                Console.WriteLine("You have selected the Game Type Selection Menu");
                GameTypeSelectionMenu();
                break;
            case 4:
                Console.WriteLine("You have selected the Cup Selection Menu: ");
                CupSelectionMenu();
                break;
            case 5:
                Console.WriteLine("You have selected the Print Out Selection Details: ");
                PrintOutSelectionDetails();
                DisplayMainMenu();
                break;
            case 6:
                Console.WriteLine("You have selected exit the program");
                Environment.Exit(0);
                break;
            default:
                Console.WriteLine("You have made an illegal selection");
                DisplayMainMenu();
                break;
        }
    }
}

背景图片:

5 个答案:

答案 0 :(得分:1)

问题是您将静态方法放入了Main中。将它们放在班级中Main旁边。

答案 1 :(得分:0)

您正在另一个函数DisplayMainMenu()内定义一个函数Main(string[] args),这是不可能的,并且会导致错误。
您必须在函数外部定义函数,然后可以在Main内部调用它。然后,下划线将消失。
在C#中无法像在Javascript中那样定义函数... 您必须将一个函数定义为类的成员,然后才能从其他函数中调用它。

答案 2 :(得分:0)

尽管在C#7上引入了局部功能,但是它们不能成为static主题。

请参见docs

  

与方法定义不同,局部函数定义不能包含   以下元素:

     
      
  • 成员访问修饰符。由于所有本地功能都是私有的,   包括访问修饰符(例如private关键字)会生成   编译器错误CS0106,“修饰符'private'对此无效   项目。”

  •   
  • 静态关键字。包括static关键字生成编译器   错误CS0106,“修饰符'static'对此项目无效。”

  •   

话虽如此,您可以执行以下操作:

class MyClass
{
    void DoSomething()
    {
        InnerMethod(); 
        void InnerMethod() { ... } // local function defined within DoSomething
    }
}

对于static,这是不可能的,这就是为什么在Main中定义局部函数时会出现编译器错误的原因。

无论如何,局部函数只是语法糖,被编译为类中的常规方法。因此,以上内容被编译为类似于以下内容的内容:

class MyClass
{
    void DoSomething()
    {
        InnerMethod(); 
    }
    void InnerMethod() { ... }        
}

这是在C#7之前必须使用的内容。

答案 3 :(得分:0)

问题是您试图在另一个静态函数内定义一个静态函数,这没有任何意义。

关键字static表示不可实例化的类,或者属于无法在该类的对象上调用的类的方法。

虽然您可以从C#7.0开始拥有局部函数,但是由于上述原因,您不能将嵌套函数声明为静态函数。

我要么从本地函数中删除static关键字,要么创建一个类并将其定义为该类中的静态方法。

答案 4 :(得分:0)

通过添加以下内容进行排序:

static void Main(string[] args)
        {
            DisplayMainMenu();
        } 

右下角使我可以保持所有内容不变,并且现在一切正常。