Мне нужно сделать простой калькулятор ( , -, /, *), где все методы должны представлять собой лямбда-выражения (или должны быть сделаны с помощью лямбда-оператора). Я пока не особо силён в лямбдах и анонимных методах, по этому немогли бы вы мне помочь с этим?
Буквально только сами тела методов, менюшку я сделаю сам.
Задача куда проще чем ты думаешь. На твоём месте я бы прошёл курс C# Essential, а именно урок про делегаты. Там Александр Шевчук очень подробно описал делегаты и всё что с ними можно делать.
Вот реализация класса Calculator , где тобою перечилсенные методы реализованы в виде лямбда-выражений.
namespace Calculator
{
using System;
public static class Calculator
{
public static Func Add = (a, b) => a b;
public static Func Subtract = (a, b) => a - b;
public static Func Multiply = (a, b) => a * b;
public static Func Divide = (a, b) => a / b;
}
}
В данном случае мы создали для каждого метода экземпляр класса-делегата Func<>. Нужно это потому, что лямбда-выражение, по сути, является анонимным методом, тобишь методом без имени, а что б мы смогли этот метод без имены вызывать - мы привязали его к делегату. Можно было бы создать свой собственный делегат, но зачем если у нас есть очень удобный системный делегат?
Менюшку я не писал, но проверить работоспособность методов всё равно нужно, так что решил не стирать:
namespace Main
{
using System;
using Calculator;
public class Program
{
public static void Main()
{
try
{
Console.WriteLine($"5 10 = {Calculator.Add(5, 10)}");
Console.WriteLine($"5 - 10 = {Calculator.Subtract(5, 10)}");
Console.WriteLine($"5 * 10 = {Calculator.Multiply(5, 10)}");
Console.WriteLine($"5 / 10 = {Calculator.Divide(5, 10)}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Division by zero is prohibited.");
}
Console.ReadKey();
}
}
}
Спасибо большое!
А как можно написать функцию взятия корня от какого-то числа (но не квадратный корень!)?
namespace Main
{
using System;
using Calculator;
public class Program
{
public static void Main()
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.InputEncoding = System.Text.Encoding.UTF8;
try
{
Console.WriteLine($"5 10 = {Calculator.Add(5, 10)}");
Console.WriteLine($"5 - 10 = {Calculator.Subtract(5, 10)}");
Console.WriteLine($"5 * 10 = {Calculator.Multiply(5, 10)}");
Console.WriteLine($"5 / 0 = {Calculator.Divide(5, 0)}");
Console.WriteLine($"5 ^ 4.6 = {Calculator.Power(5, 10)}");
Console.WriteLine($"625 ^ 1/3 = {Calculator.Root(625, 3)}");
}
catch (Exception exception)
{
Console.WriteLine($"Произошло исключение: {exception.Message}");
}
Console.ReadKey();
}
}
}
namespace Calculator
{
using System;
public static class Calculator
{
public static Func Add = (a, b) => a b;
public static Func Subtract = (a, b) => a - b;
public static Func Multiply = (a, b) => a * b;
public static Func Divide = (a, b) => a / b;
public static Func Power = (a, b) => Math.Pow(a, b);
public static Func Root = (a, b) => Math.Pow(a, 1.0 / b);
}
}