Скажите, что я хочу иметь метод, который принимает какой-либо номер, есть ли базовый класс (или какая-то другая концепция), которую я могу использовать?
Насколько я знаю, мне приходится делать перегрузки для всех разных числовых типов (Int32, Int16, Byte, UInt32, Double, Float, Decimal и т.д.). Это кажется ужасно утомительным. Либо это, либо используйте тип "объект" и исключайте исключения, если они не могут быть конвертируемыми или присваиваемыми двойнику, что довольно плохо, поскольку это означает, что проверка времени компиляции не выполняется.
UPDATE: Хорошо спасибо за комментарии, вы правы, Scarecrow и Marc, фактически объявляя это как Double, фактически работает для всех, кроме Decimal.
Итак, ответ, который я искал, - Double - он действует как базовый класс здесь, поскольку для него назначаются большинство числовых типов. (Я думаю, что Decimal не назначается Double, так как он может стать слишком большим.)
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;
}