编辑***** 我通过在最后添加内容来修复它,该代码允许代码在保持所有内容不变的情况下工作
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;
}
}
}
背景图片:
答案 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();
}
右下角使我可以保持所有内容不变,并且现在一切正常。