[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
В этой статье, мы рассмотрим пример простого консольного калькулятора на C#, который поддерживает сложение, вычитание, умножение и деление, а так же более сложного на основе CSharp Scripting.
Определим следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
static void Main() { Console.WriteLine("Welcome to the calculator!"); Console.WriteLine("Enter your first number:"); double num1 = double.Parse(Console.ReadLine()); Console.WriteLine("Enter your second number:"); double num2 = double.Parse(Console.ReadLine()); Console.WriteLine("Enter the operation you want to perform (+, -, *, /):"); string op = Console.ReadLine(); double result = 0; switch (op) { case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": if (num2 != 0) { result = num1 / num2; } else { Console.WriteLine("Division by zero is not allowed."); return; } break; default: Console.WriteLine("Invalid operator."); return; } Console.WriteLine($"The result of {num1} {op} {num2} is {result}."); } |
Когда вы запустите эту программу, она предложит вам ввести два числа и операцию, которую вы хотите выполнить. Затем программа выполнит вычисления и отобразит результат. Если вы попытаетесь разделить на ноль, программа не завершится, а выдаст сообщение об ошибке.
Microsoft CodeAnalysis CSharp Scripting
В языке C# есть C# Scripting, он похож на eval из других языков, он представляет собой функцию, которая оценивает строку, как если бы она была выражением, и возвращает результат;
Рассмотрим пример «калькулятора», написанного в одну строку:
1 2 3 4 5 6 |
static async Task Main() { var expression = "2 * (6 + 7) - 10 / 2"; var result = await CSharpScript.EvaluateAsync<double>(expression); Console.WriteLine(result); } |
Не забудьте подключить следующие пространства имен:
1 2 |
using Microsoft.CodeAnalysis.CSharp.Scripting; using Microsoft.CodeAnalysis.Scripting; |
В методе Main объявляется строковая переменная expression и инициализируется математическим выражением 2 * (6 + 7) — 10 / 2. Это выражение включает основные арифметические операторы: * для умножения, + для сложения, — для вычитания и / для деления. Оно также включает круглые скобки для контроля порядка операций.
Затем вызывается метод CSharpScript.EvaluateAsync, параметром которого является строка выражения. Этот метод принимает на вход строку, содержащую выражение C#, компилирует ее и оценивает во время выполнения.
Метод EvaluateAsync возвращает задачу, которая разрешается в результат выражения, который в данном случае является двойным значением. Ключевое слово await используется для асинхронного ожидания результата вычисления задачи.
Наконец, результат выводится на консоль с помощью метода Console.WriteLine. В данном случае будет выведено 21, что является результатом математического выражения 2 * (6 + 7) — 10 / 2.
Используя данную библиотеку, вы можете импортировать все статические методы других классов, для дальнейшего использования. Рассмотрим пример с классом Math:
1 2 3 4 5 6 |
static async Task Main() { string codeToEval = "Sqrt(5)"; var result = await CSharpScript.EvaluateAsync(codeToEval, ScriptOptions.Default.WithImports("System.Math")); Console.WriteLine(result);//2,2 } |
Метод ScriptOptions.Default.WithImports(«System.Math») используется для указания того, что пространство имен System.Math должно быть импортировано, чтобы метод Sqrt можно было использовать в выражении codeToEval.
Я надеюсь, что вам понравилось читать эту статью, и она оказалась легкой для понимания. Пожалуйста, дайте мне знать, если у вас есть какие-либо комментарии или исправления.
Так же вам может быть интересна предыдущая статья — Как сделать скриншот экрана.
Вы хотите научится писать код на языке программирования C#?
Создавать различные информационные системы, состоящие из сайтов, мобильных клиентов, десктопных приложений, телеграмм-ботов и т.д.
Переходите к нам на страницу Dijix и ознакомьтесь с условиями обучения, мы специализируемся только на индивидуальных занятиях, как для начинающих, так и для более продвинутых программистов. Вы можете взять как одно занятие для проработки интересующего Вас вопроса, так и несколько, для более плотной работы. Благодаря личному кабинету, каждый студент повысит качество своего обучения, в вашем распоряжении:
- Доступ к пройденному материалу
- Тематические статьи
- Библиотека книг
- Онлайн тестирование
- Общение в закрытых группах
Живи в своем мире, программируй в нашем.