下面的代码将编译但在运行时失败.它只是为了让我知道我想要做什么.我想要做的是创建一个接受对象集合的方法(实际上是“无类型”集合),如果此集合由单个类型的数字组成,则使用Average()扩展方法返回平均值
@H_404_2@using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nnConsole {
class Program {
static void Main(string[] args) {
var ints = new object[4] { 1,2,3,4 };
var dbls = new object[4] { 1.0,2.0,3.0,4.0 };
Console.WriteLine(ReallyMean(ints));
Console.WriteLine(ReallyMean(dbls));
}
static public double ReallyMean(ICollection<object> data) {
var unique = data.Distinct();
var types = unique.Select(x => x.GetType()).Distinct();
if (types.Count() == 1) {
if (types.First().IsValueType) {
/***********************
* magic here to create ddata var that will
* call the appropriate extension method for average */
dynamic ddata = data; // DOES NOT WORK
return ddata.Average();
}
}
return double.NaN;
}
}
}
我确信我可以使用反射来找到合适的Average方法并调用它(不太漂亮).是否有更短/更清洁/更好的方法来做到这一点?我可以使用最新的C#和.NET运行时.