Digamos que quiero tener un método que tenga cualquier tipo de número, ¿hay alguna clase base (o algún otro concepto) que pueda usar?¿Cuál es la "clase base" para los tipos de valores numéricos C#?
Hasta donde yo sé, tengo que hacer sobrecargas para todos los diferentes tipos numéricos (Int32, Int16, Byte, UInt32, Doble, Flotante, Decimal, etc.). Esto parece terriblemente tedioso. O eso, o usa el tipo "objeto" y lanza excepciones si no son convertibles o asignables a un doble, lo cual es bastante malo, ya que significa que no hay tiempo de compilación.
ACTUALIZACIÓN: OK gracias por los comentarios, que están justo espantapájaros y Marc, de hecho declarar como Doble realmente funciona para todos, excepto decimal.
Así que la respuesta que estaba buscando es Doble: aquí actúa como una clase base, ya que la mayoría de los tipos numéricos se pueden asignar a ella. (Supongo decimal no es asignable al doble, ya que podría ser demasiado grande.)
public void TestFormatDollars() {
int i = 5;
string str = FormatDollars(i); // this is OK
byte b = 5;
str = FormatDollars(b); // this is OK
decimal d = 5;
str = FormatDollars(d); // this does not compile - decimal is not assignable to double
}
public static string FormatDollars(double num) {
return "$" + num;
}
¿Qué tipos numéricos no son asignables a doblar? (Excepto por las grandes clases de números que admiten números arbitrariamente grandes) –
@scarecrow - decimal es de 96 bits ... muchos otros simplemente no son buenos para el rango/escala. –
¿Quizás podría aclarar qué quiere hacer con los números dentro del método? –