Умножьте int и <T> - PullRequest
       54

Умножьте int и <T>

0 голосов
/ 26 июня 2019

Я пытаюсь написать эту функцию в общем виде, чтобы она могла обрабатывать числа с плавающей запятой, двойные, десятичные или целые числа.

Это работает за исключением того, что оператор (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 Ответ

3 голосов
/ 26 июня 2019

Есть только несколько типов, для которых вы можете выполнять умножение, и многие из них неявно конвертируются в другие. Вместо объявления универсального типа T, который может быть практически любым и может поддерживать или не поддерживать умножение, вы можете просто написать перегрузки, которые охватывают все эти параметры.

Этот график показывает неявные преобразования. Исходя из этого, если вы напишите свои методы для поддержки int, double и decimal, это должно охватывать все.

В процессе тестирования вы можете обнаружить, что он работает, как ожидается, для одного типа, но не для другого. Я бы написал модульные тесты для всех этих трех типов.

...