将int和<T>相乘

时间:2019-06-26 18:59:29

标签: c# dynamic casting type-conversion

我正在尝试以通用方式编写此函数,以便它可以处理浮点,双精度,十进制或整数。

它起作用,除了语句(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;
}

1 个答案:

答案 0 :(得分:3)

只有少数几种类型可以执行乘法运算,并且许多类型可以隐式转换为其他类型。您可以编写覆盖所有这些选项的重载,而不是声明可能几乎没有任何东西且可能支持乘法的泛型类型T

This chart显示隐式转换。基于此,如果编写支持intdoubledecimal的方法,那么这应该涵盖了所有内容。

在测试过程中,您可能会发现它对一种类型可以正常工作,但对另一种类型却无法工作。我将为所有这三种类型编写单元测试。