C#报错:顶级语句必须位于命名空间和类型声明之前?
问题原因解释
你遇到的报错“顶级语句必须位于命名空间和类型声明之前”,核心是C#的语法规则:顶级语句(指那些没有包含在任何命名空间、类、结构体等类型内部的代码,比如你写的变量声明和Console.WriteLine语句)必须放在代码文件的最开头,不能出现在命名空间、类定义之后。
你的代码里,把变量声明和输出语句放在了namespace HelloWorld块的后面,这就违反了这个规则,所以编译器报错。
两种解决方案
方案1:将顶级语句移到文件最前面
把变量声明和输出语句移到using System;之后、namespace HelloWorld之前,这样顶级语句会被编译器当作程序的入口点,原来的Main方法可以保留或删除(如果保留,运行时会先执行顶级语句,再执行Main里的代码)。修改后的代码如下:
using System; // 顶级语句移到最前面 string stringex = "string"; int integerex = 17; double floatex = 17.5; char charex = '!'; bool boolex = true; Console.WriteLine(stringex); Console.WriteLine(integerex); Console.WriteLine(floatex); Console.WriteLine(charex); Console.WriteLine(boolex); namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello World"); } } } //this won't do anything /*neither will this*/
方案2:将代码移到Main方法内部
如果你想沿用原来的Main方法作为程序入口,直接把变量声明和输出语句放到Main方法里即可,这样代码就属于类的成员方法内部的代码,不再是顶级语句,也就不会触发报错:
using System; namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello World"); // 把变量和输出移到Main里 string stringex = "string"; int integerex = 17; double floatex = 17.5; char charex = '!'; bool boolex = true; Console.WriteLine(stringex); Console.WriteLine(integerex); Console.WriteLine(floatex); Console.WriteLine(charex); Console.WriteLine(boolex); } } } //this won't do anything /*neither will this*/
这样修改后,运行程序就能正常输出你想要的变量值了。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

