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

Программа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
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
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

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