Как исправить ошибку оператора верхнего уровня?

Программа1.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();

Программа2.cs

Console.ReadKey();

Под модулем Консоль выскакивает ошибка: Только одна единица компиляции может иметь операторы верхнего уровня. Ошибка: CS8802

Я пробовал в терминале новая консоль dotnet --force, но он просто удаляет мою программу. Я хочу запустить несколько файлов C# в одной папке, не получая Только одна единица компиляции может иметь операторы верхнего уровня. или другие подобные ошибки.

Вы хотите запускать несколько программ одновременно? Оба они читают консольный ввод. Как это сработает?

Charles Mager 10.04.2022 12:57

Разве сообщение об ошибке не ясно? Вы получаете только один файл, в котором можно обойтись без определения класса.

Kirk Woll 10.04.2022 13:12

Означает ли это, что мне нужно создать новую папку для моих файлов С#?

Canyon 10.04.2022 13:14

@Canyon папка не имеет значения. Что вы на самом деле пытаетесь здесь сделать? Вы можете определить что-нибудь еще в другом файле (например, класс), но то, что вы фактически делаете выше, определяет два Main метода/точки входа. Вы можете иметь только один из них, выполнение более одного не имеет смысла.

Charles Mager 10.04.2022 13:29
Получение данных из формы с помощью JavaScript - краткое руководство
Получение данных из формы с помощью JavaScript - краткое руководство
Получить данные из формы с помощью JS очень просто: вы запрашиваете элемент формы, передаете его конструктору new FormData() и, наконец, получаете...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
2
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В dotnet 6 для основного метода не требуется имя класса.

Поэтому, когда у вас есть 2 класса, у которых нет класса и пространства имен, компилятор думает, что у вас есть 2 основных метода.

Итак, вы делаете что-то вроде

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.");
    }
}

а для программы2 некоторые думают так:

namespace ConsoleApp1;

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

В противном случае это все равно, что сказать 2 раза public static void Main(string[] args), а это невозможно.

Как мне выбрать, какую программу я хочу запустить?

Canyon 10.04.2022 14:15

программа, содержащая метод Main, So Main является точкой входа для вашей программы. Программа просто класс,

Maytham 10.04.2022 14:18

Я изменю свой ответ, чтобы дать вам лучшую картину

Maytham 10.04.2022 14:19

так что теперь программа1 содержит метод с некоторой логикой, а программа 2 вызывает метод в программе1, программа 2 имеет метод Main, который является точкой входа для запуска

Maytham 10.04.2022 14:23

Другие вопросы по теме