попытка создать метод для вычисления, а затем вызвать его внутри другого метода. Перегрузка с помощью C#

#c#

#c#

Вопрос:

Я пытаюсь создать метод с вычислением, а затем вызвать его внутри двух других методов. Проблема, с которой я сталкиваюсь, заключается в том, что каждый из двух других методов является int и float соответственно.

я хочу создать метод этого «((цельсия * 9) / 5) 32;» а затем вызовите его при перегрузке 1 и 2, проблема в том, что первый — int, а второй — float .. CTF — это метод, который я пытался создать для этого.

Как мне это решить? Спасибо!

         // Overloading 1 - with float
        public static int CelsiusToFahrenheit(int celsius)
        {
            int fahrenheit = ((celsius * 9) / 5)   32;
            return fahrenheit;
        }

        //METHOD, CelsiusToFahrenheit
        //Overloading 2 - with float
        public static float CelsiusToFahrenheit(float celsius)
        {
            int fahrenheit = ((celsius * 9) / 5)   32;
            return fahrenheit;
        }

        //METHOD, convert celsius to fahrenheit
        static double CTF(double celsius)
        {
            
            double a = ((celsius * 9) / 5)   32;
            return a; 

        }

  

Комментарии:

1. Похоже, подходит для общих методов .

2. @Sinatr: Я так не думаю. Дженерики на самом деле не помогают с числовыми операциями, подобными этому.

3. Вы на самом деле не сказали нам, в чем проблема — не можете ли вы просто выполнить приведение в каждом общедоступном методе, например public static int CelsiusToFahrenheit(int celsius) => (int) CTF(celsius); , и аналогично для float перегрузки?

4. Я бы определил только один метод, тот, с double . Входной параметр int or float будет автоматически преобразован в double . Затем, если вам нужен другой тип результата, просто приведите: int result = (int)CTF(17.2); . Это то, что вам нужно делать в большинстве методов System.Math : int root = (int)Math.Sqrt(x); . (Обратите внимание, что в .NET Core также есть MathF класс для чисел с плавающей запятой

5. @Sinatr: использование приведения и Convert.ChangeType в значительной степени сводит на нет смысл использования дженериков. Он предназначен для обеспечения безопасности во время компиляции, но CTF(DateTime.UtcNow) компилирует и выдает исключение с вашим кодом.