#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
orfloat
будет автоматически преобразован в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)
компилирует и выдает исключение с вашим кодом.