我尝试制定通用平均方法。使该方法可以与任何类型进行交互。但是any类型的值也必须是通用的。这样您就可以拥有以下类型:int,float,decimal。
我这样尝试:
public class Calculator<T>
{
public T Average(List<T>items, Func<T, T> getValue )
{
T sum = 0 ;
foreach (var item in items)
{
sum += getValue(item);
}
return (T) Convert.ChangeType(sum / items.Count(), typeof(T));
}
}
}
而且我有一个这样的示例类:
public class Product<T>
{
public T Weight { get; set; }
}
但是我已经在这行上得到一个错误:
T sum = 0 ;
无法将类型'int'隐式转换为'T'
和程序类:
var listProducts = new List<Product<int>> {
new Product<int>{ Weight = 1},
new Product<int> { Weight = 2},
new Product<int> { Weight = 87}
};
var calc2 = new Calculator<Product<int>>();
var averageWeight = calc2.Average(listProducts, p => p.Weight);
Console.WriteLine($"Average weight is: {averageWeight}" );
尝试使用
T sum = default(T);
如果仅使用值类型,例如,通用类型约束也很有意义
where T : struct
无法将类型'int'隐式转换为'T'
这意味着T是泛型类型,它可以是从字符串到int的任何类型,也可以是您不能分配0的其他类型(它是int类型)。
尝试替换
T sum = 0;
with
T sum = default(T);