我正在尝试以通用方式编写此函数,以便它可以处理浮点,双精度,十进制或整数。
它起作用,除了语句(increment * ti)
给出:“运算符*不能应用于类型T和int的操作数。”
public static List<T> RangeIncrement<T>(T start, T end, T increment)
{
T range = (((dynamic)end - (dynamic)start) / increment) + 1;
if (TryCast(range, out int endRange))
{
return Enumerable
.Repeat(start, endRange)
.Select((tr, ti) => tr + (increment * ti))
.ToList();
}
return null;
}
答案 0 :(得分:3)
只有少数几种类型可以执行乘法运算,并且许多类型可以隐式转换为其他类型。您可以编写覆盖所有这些选项的重载,而不是声明可能几乎没有任何东西且可能支持乘法的泛型类型T
。
This chart显示隐式转换。基于此,如果编写支持int
,double
和decimal
的方法,那么这应该涵盖了所有内容。
在测试过程中,您可能会发现它对一种类型可以正常工作,但对另一种类型却无法工作。我将为所有这三种类型编写单元测试。