如何修复顶级语句的错误?

Can*_*yon 4 c# file toplevel-statement

Program1.cs常规 C# 文件,运行良好。

Random numberGen = new Random();

int roll1 = 1;
int roll2 = 0;
int roll3 = 0;
int roll4 = 0;

int attempts = 0;

Console.WriteLine("Press enter to roll the dies");

while (roll1 != roll2 || roll2 != roll3 || roll3 != roll4 || roll4 != roll1)
{
    Console.ReadKey();

    roll1 = numberGen.Next(1, 7);
    roll2 = numberGen.Next(1, 7);
    roll3 = numberGen.Next(1, 7);
    roll4 = numberGen.Next(1, 7);
    Console.WriteLine("Dice 1: " + roll1 + "\nDice 2: " + roll2 + "\nDice 3: " + roll3 + "\nDice 4: " + roll4 + "\n");
    attempts++;
}

Console.WriteLine("It took " + attempts + " attempts to roll a four of a kind.");

Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

程序2.cs

Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

模块Console下弹出错误: 只有一个编译单元可以有顶级语句。错误:CS8802

我在终端dotnet new console --force中尝试过,但它最终删除了我的程序。

我想在同一文件夹中运行多个 C# 文件,而不会出现“ 只有一个编译单元可以有顶级语句”或其他类似错误。

may*_*ʎɐɯ 6

在 dotnet 6 及更高版本中,可以使用顶级语句,这意味着您不需要为主方法提供类名。

因此,当您有 2 个没有类和名称空间的 cs 文件时,编译器会认为您有 2 个主要方法。

所以你最终可以对 Program1.cs 执行类似的操作:

namespace ConsoleApp1;

class Program1
{
    public static void GetRolling()
    {
        Random numberGen = new Random();

        int roll1 = 1;
        int roll2 = 0;
        int roll3 = 0;
        int roll4 = 0;

        int attempts = 0;

        Console.WriteLine("Press enter to roll the dies");

        while (roll1 != roll2 || roll2 != roll3 || roll3 != roll4 || roll4 != roll1)
        {
            Console.ReadKey();

            roll1 = numberGen.Next(1, 7);
            roll2 = numberGen.Next(1, 7);
            roll3 = numberGen.Next(1, 7);
            roll4 = numberGen.Next(1, 7);
            Console.WriteLine("Dice 1: " + roll1 + "\nDice 2: " + roll2 + "\nDice 3: " + roll3 + "\nDice 4: " + roll4 + "\n");
            attempts++;
        }

        Console.WriteLine("It took " + attempts + " attempts to roll a four of a kind.");
    }
}
Run Code Online (Sandbox Code Playgroud)

对于 Program2.cs 类似:

namespace ConsoleApp1;

public class Program2
{
    public static void Main(string[] args)
    {
        Program1.GetRolling();
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

否则,就像说你有两次 (2x) 一样public static void Main(string[] args),这是不可能的。因此你会得到那个错误。