Как работают обобщения

Почему код не компилируется?

Operator '*' cannot be applied to operands of type 'T' and 'int'.

На каком-то подобном вопросе объясняют, что не каждый тип T имеет перегрузку оператора *. Разве после проверки, что это числовое значение, не должно работать нормально? Какие варианты правильного исправления этого метода, чтобы он работал?

        public T SomeMethod<T>(T param)
        {
            if (typeof(T) == typeof(int) || typeof(T) == typeof(double) || typeof(T) == typeof(float))
            {
                return param * 2;
            }
            if (typeof(T) == typeof(string))
            {
                return $"{param}";
            }

            return param;
        }

Ладно бы первое условие только не работало, почему не работает второе условие, разве не любой тип имеет метод ToString?


Ответы (0 шт):