一个是short[]一个是List<double>我开始也觉得应该都能省略,但是写了个小测试代码发现真不行
short[] test1 = new short[]{1,2,3,4,5};
            List<double> test2 = new List<double>(){1.3, 4.5, 5.6, 7.8 , 8.4};            var result1 = test1.Average();
            var result2 = test2.Average();
不行的原因是隐式转换, short可以隐式转换成int,下面的代码么有问题
 short s = 111;
 int aaa = s;因此var result1 = test1.Average(a=> a); 没有问题,short隐身转换成Int了。var result1 = test1.Average(); 不行是因为short[] 不能隐式转换成IEnumerable<int>,或者IEnumerable<double>,而Average又不接受IEnumerable<short>这种类型的参数。因此报错。下面的都报错:short[] test1 = new short[]{1,2,3,4,5};
            IEnumerable<int> test3 = test1;
            IEnumerable<double> test4 = test1; var result2 = test2.Average();没有问题,是因为Average接受IEnumerable<double>类型的参数。Average的文档见:
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.average.aspx