Может ли действие / делегат изменить значение аргументов?

Я столкнулся с неожиданным результатом при тестировании простого метода расширения ForEach .

ForEach метод

public static void ForEach<T>(this IEnumerable<T> list, Action<T> action)
{
    if (action == null) throw new ArgumentNullException("action");

    foreach (T element in list)
    {
        action(element);
    }
}

Тест метод

[TestMethod]
public void BasicForEachTest()
{
    int[] numbers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    numbers.ForEach(num =>
    {
        num = 0;
    });

    Assert.AreEqual(0, numbers.Sum());
}

Почему numbers.Sum () равняется 55, а не 0?

5
задан Otiel 13 December 2011 в 18:54
поделиться