The reason I asked if it was a puzzle was because a puzzle is allowed to sacrifice robustness in varying degrees as long as it satisfies the letter of the stated problem. With that in mind, here goes:
Solution 1 (runs instantly, problem doesn't validate):
public static string Aggregate(this IEnumerable l, Func f) {
return "";
}
Solution 2 (runs about as fast as the problem requires, but ignores the delegate completely):
public static string Aggregate(this IEnumerable l, Func f) {
StringBuilder sb = new StringBuilder();
foreach (string item in l)
sb.Append(", ").Append(item);
return sb.Remove(0,2).ToString();
}