using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Fun<T>(List<T> list)
{
// The foreach works
foreach(T i in list)
{
Console.WriteLine(i);
}
//The following line has error: List<T>' does not contain a definition for 'Sum'
Console.WriteLine(list.Sum());
}
public static void Main()
{
var arr = new int[]{1,2,3,4};
Fun<int>(arr.ToList());
}
}
the foreach
works, but list.Sum()
doesn't. It shows:
'List' does not contain a definition for 'Sum' and the best extension method overload 'Queryable.Sum(IQueryable)' requires a receiver of type 'IQueryable'
if I declare as public static void Fun(List<int> list)
, then it works, anybody know why?
a similar C++ version can work:
#include <iostream>
#include <vector>
using namespace std;
template<class T>
struct MyList
{
MyList(vector<T> v) : m(v){};
vector<T> m;
T Sum()
{
T sum = T();
for(auto i : m)
{
sum += i;
}
return sum;
}
};
template<class T>
void Fun(MyList<T> list)
{
cout << list.Sum() << endl;
}
int main(int argc, char *argv[])
{
Fun(MyList<int>({1,2,3}));
Fun(MyList<double>({1.0,2.0,3.0}));
}
output:
6
6.3