Арифметические операции - это функции, которые принимают два числа и возвращают третье число.В общем случае они могут быть выражены как функция:
int AddOperation(int a, int b)
{
return a + b;
}
Делегат для такого рода функции может быть сохранен в переменной, которая имеет тип Func<int,int,int>
.
Func<int,int,int> functionPointer = AddOperation;
Вместо того, чтобы объявлять целый метод только для AddOperation
, вы также можете сохранить это анонимный метод , объявленный с лямбда-выражением :
Func<int,int,int> functionPointer = (a,b) => a + b;
И выможет сохранить ряд этих функций, например, в словаре:
var operators = new Dictionary<string,Func<int,int,int>>
{
{ "+", (a,b) => a + b },
{ "-", (a,b) => a - b },
{ "*", (a,b) => a * b },
{ "/", (a,b) => a / b }
};
Затем, чтобы выполнить операцию, вы ищите функцию:
var symbol = "+";
var operation = operators[symbol];
... и используетечтобы вычислить результат:
var result = operation(arg1,arg2);
Вот пример, который выполняет все четыре операции над числами 10 и 2:
public static void Main()
{
var operators = new Dictionary<string,Func<int,int,int>>
{
{ "+", (a,b) => a + b },
{ "-", (a,b) => a - b },
{ "*", (a,b) => a * b },
{ "/", (a,b) => a / b }
};
var arg1 = 10;
var arg2 = 2;
foreach (var symbol in operators.Keys)
{
var func = operators[symbol];
var result = func(arg1,arg2);
Console.WriteLine("{0}{1}{2}={3}", arg1, symbol, arg2, result);
}
}
Вывод:
10+2=12
10-2=8
10*2=20
10/2=5
Ссылка на рабочий пример на DotNetFiddle