Что делают делегаты в C#?
Вашу задачу можно сделать тремя способами:
1) создать метод, который будет суммировать каждый элемент списка в переменную, точнее, в поле класса.long Result;
long Sum(List<int> intList)
{
    Result = 0;
    intList.ForEach(AddElement);
    return Result;
}

void AddElement(int i)
{
    Result += i;
}
2) Чтобы не создавать "лишнюю" функцию, необходимую только для конкретной задачи, то можно взять анонимную функцию. Анонимные функции в C# используются с помощью делегатов. Дополнительно, анонимные функции могут использовать замыкания, и нет необходимости создавать внешнее поле.long Sum(List<int> intList)
{
    long result = 0;
    intList.ForEach(delegate(int i) { result += i; });
    return result;
}
3) Можно взять лямбду - в данном случае, это "синтаксический сахар" - упрощение создания делегата.long Sum(List<int> intList)
{
    long result = 0;
    intList.ForEach(i => result += i);
    return result;
}
В данном случае суммирует элементы. Увеличивает значение result на текущий элемент из intListUPD: в данном случае это ссылка на анонимный метод