【发布时间】:2019-10-18 11:03:49
【问题描述】:
我尝试制作一个通用平均方法。这样该方法就可以与任何类型进行交互。但 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}" );
我现在是这样的:
public class Calculator<T> where T: class
{
public T Average(List<T>items, Func<T, T> getValue )
{
T sum = default(T);
foreach (var item in items)
{
sum += getValue(item);
}
return (sum / items.Count());
}
}
但我得到了这个错误:
'+=' cannot be applied to operands of type 'T' and 'T'
在这一行:
sum += getValue(item);
【问题讨论】:
-
请看我更新的答案