Как можно объединить эти методы c#?
public static int Method1(IEnumerable<int> a, int b)
{
var sum = 0;
foreach (var x in a)
{
sum += b * x;
b++;
}
return sum;
}
public static int Method2(IEnumerable<int> a, int b)
{
var sum = 0;
foreach (var x in a)
{
sum += b * x;
b = 4 - b;
}
return sum;
}
Может я могу передавать действие которое можно сделать с b? (b = b + 1, b = 4 - b)
public static int Method(IEnumerable<int> a, int b, ??? calculation)
{
var sum = 0;
foreach (var x in a)
{
sum += b * x;
b = calculation;
}
return sum;
}
Ответы (1 шт):
Автор решения: Sergey K.
→ Ссылка
Как вариант можно передавать лямбду, для этого используем делегат.
public delegate int Operation(int x);
public static int Calculate(IEnumerable<int> a, int b, Operation calculation) {
var sum = 0;
foreach (var x in a)
{
sum += b * x;
b = calculation(b);
}
return sum;
}
делегат определяет сигнатуру лямбды - возвращаемое значение и принимаемые параметры.
Далее, передаём параметром третьим параметром лямбду, которая на каждой итерации цикла выполнит операцию, описанную в вашей лямбда-функции.
Полный пример:
using System;
using System.Collections.Generic;
class Program
{
public delegate int Operation(int x);
public static int Calculate(IEnumerable<int> a, int b, Operation calculation) {
var sum = 0;
foreach (var x in a)
{
sum += b * x;
b = calculation(b);
}
return sum;
}
static void Main() {
var a = new List<int> {1,2,3,4,5,6,7,8,9};
int b = 1;
Console.WriteLine(Calculate(a, b, (x) => b * 2));
}
}