[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var victimArray = new string[] {
"1", "3", "2", "1", "23",
"44", "32", "2", "10", "0",
"17", "-1", "34", "79", };
var expectedIndexesWithValues = new List<string>() {
{"23"}, // "пятый" элемент
{"0"} // следующий "пятый" элемент
};
var actualIndexesWithValues = new List<string>();
victimArray.RunActionOnEach(eachElementNumber: 5,
actionOnElement: (elementValue) => {
Console.WriteLine($"Какое-то жизненно необходимое действие на элементе \"{elementValue}\"");
actualIndexesWithValues.Add(elementValue);
}
).ToList();
// проверяем, что результат совпадает с нашими ожиданиями
CollectionAssert.AreEquivalent(expectedIndexesWithValues, actualIndexesWithValues);
}
}
internal static class IEnumerableExtension
{
/// <summary>
/// Дергает переданный Action на каждом eachElementNumber элементе
/// </summary>
public static IEnumerable<string> RunActionOnEach(this IEnumerable<string> sourceCollection, int eachElementNumber, Action<string> actionOnElement)
{
int currentNumber = 1;
foreach (var element in sourceCollection)
{
if (currentNumber % eachElementNumber == 0)
actionOnElement(element);
currentNumber++;
yield return element;
}
}
}