“顶级语句必须位于命名空间和类型声明之前”

aid*_*dan 9 c# toplevel-statement

所以我写代码的时间不长,所以经验也不是很多,最近我在 replit.com 上遇到了一个问题,控制台会打印出:

error CS8803: Top-level statements must precede namespace and type declarations.
using System;
Run Code Online (Sandbox Code Playgroud)

有人能提出这个问题吗?这是我的代码,供任何想知道的人使用:

int English;
int Science;
int AverageCalc;

AverageCalc = Convert.ToInt32(Console.ReadLine());

class Program {
  public static void Main (string[] args) {
    Console.WriteLine("Write your math grades");

      Math = Convert.ToInt32(Console.ReadLine());

      Console.WriteLine("Write your english grades");

      English = Convert.ToInt32(Console.ReadLine());

      Console.WriteLine("Write your science grades");

      Science = Convert.ToInt32(Console.ReadLine());

      AverageCalc = (Math+English+Science/3);
  }
}

if (AverageCalc > 80)
{
  Console.WriteLine("You passed with A mark!");
}
else if (AverageCalc < 80)
{
  Console.WriteLine("You passed with B mark!");
}
else if (AverageCalc < 65)
{
  Console.WriteLine("You passed with C mark!");
}
else if (AverageCalc < 60)
{
  Console.WriteLine("You passed with D mark!");
}
else if (AverageCalc < 55)
{
  Console.WriteLine("You got lower than D mark, try better next time.");
}
Run Code Online (Sandbox Code Playgroud)

viv*_*una 9

正如 @Caius 在他的回答中提到的,您正在修复代码中的顶级语句和经典方式。

您可以按照他建议的方法进行操作,或者直接从代码中删除以下部分。

class Program
{
    public static void Main (string[] args) 
    {
Run Code Online (Sandbox Code Playgroud)

并关闭}ProgramMain方法。

示例取自文档

下面的代码是相同的。

using System;

namespace Application
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

传输层安全协议

Console.WriteLine("Hello, World!");
Run Code Online (Sandbox Code Playgroud)


Cai*_*ard 6

您正在混合顶级语句和非 TLS。TLS 本质上允许您消除所有这些namespace/class/static main,只编写一个 C# 程序,就好像它是 Main 方法的内容一样:learn.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/

从本质上讲,这意味着程序结构有点不稳定,因为您从一些 TLS 开始,然后采用更常规的样式,然后回到 TLS;放弃 TLS 结构(我建议您习惯命名空间/类/主要内容;它仍然被大量使用,并且在某种程度上,它是对花括号和范围的合理介绍)。看起来像:

namespace X{
    class Program {
        public static void Main (string[] args) {
    
            int English;
            int Science;
            int AverageCalc;
        
            Console.WriteLine("Write your math grades");
        
            Math = Convert.ToInt32(Console.ReadLine());
        
            Console.WriteLine("Write your english grades");
        
            English = Convert.ToInt32(Console.ReadLine());
        
            Console.WriteLine("Write your science grades");
        
            Science = Convert.ToInt32(Console.ReadLine());
        
            AverageCalc = (Math+English+Science/3);
    
    
            if (AverageCalc > 80)
            {
              Console.WriteLine("You passed with A mark!");
            }
            else if (AverageCalc < 80)
            {
              Console.WriteLine("You passed with B mark!");
            }
            else if (AverageCalc < 65)
            {
              Console.WriteLine("You passed with C mark!");
            }
            else if (AverageCalc < 60)
            {
              Console.WriteLine("You passed with D mark!");
            }
            else if (AverageCalc < 55)
            {
              Console.WriteLine("You got lower than D mark, try better next time.");
            }

            Console.WriteLine("Press ENTER to exit (hah)");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Main像这样的简单程序完全在方法的花括号范围内执行。稍后,当您开始进入实际的面向对象的事物并且有多个您正在跟踪其成绩的学生时,您会将内容从静态 Main 中移出,并在其他花括号块中写入,但现在就这样做了。

你忘记了声明一个变量math- 我将把它作为练习留给你来解决。另外,当在方法(Main是方法)内声明变量时,您应该使用camelCase而不是命名它们PascalCase。现在看起来可能并不重要,但它是约定,并且当代码变得更加复杂时遵循它会有所帮助。PascalCase 通常用于公共方法、属性、casses 和名称空间,camel 则用于私有或本地。

简而言之,你的变量应该被称为english, science, 和averageCalc