Si je veux avoir une méthode qui prend n'importe quel type de nombre, existe-t-il une classe de base (ou un autre concept) que je peux utiliser ?
Pour autant que je sache, je dois créer des surcharges pour tous les différents types numériques (Int32, Int16, Byte, UInt32, Double, Float, Decimal, etc). Cela semble terriblement fastidieux. C'est soit ça, soit utiliser le type "objet" et lancer des exceptions s'ils ne sont pas convertibles ou assignables à un double - ce qui est plutôt mauvais car cela signifie qu'il n'y a pas de vérification à la compilation.
UPDATE : OK, merci pour les commentaires, vous avez raison Scarecrow et Marc, en fait, le fait de le déclarer comme Double fonctionne pour tous, sauf pour Decimal.
La réponse que je cherchais est donc Double - elle agit ici comme une classe de base puisque la plupart des types numériques lui sont assignables. (Je suppose que Decimal n'est pas assignable à Double, car il pourrait devenir trop grand).
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;
}
1 votes
Quels types numériques ne sont pas assignables au double ? (Sauf pour les classes de grands nombres qui supportent des nombres arbitrairement grands)
1 votes
@scarecrow - decimal est un bit 96... beaucoup d'autres ne correspondent tout simplement pas à la gamme/échelle.
0 votes
Peut-être pourriez-vous préciser ce que vous voulez faire avec les chiffres à l'intérieur de la méthode ?