c# - 数值类型的 "base class"是什么?

标签 c# .net types

假设我想要一个接受任何类型数字的方法,是否有我可以使用的基类(或其他一些概念)?

据我所知,我必须对所有不同的数字类型进行重载(Int32Int16Byte UInt32DoubleFloatDecimal 等)。这看起来非常乏味。或者使用类型 object 并在它们不可转换或分配给 double 时抛出异常 - 这非常糟糕,因为它意味着没有编译时检查。

更新: 好的,感谢您的评论,稻草人和 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;
}

最佳答案

答案是:您不需要为所有数字类型提供重载,只需为 DoubleDecimal 提供重载。所有其他(除了一些非常大的异常)将自动转换为这些。

不是基类,但实际上这是转移注意力的问题。基类 System.ValueType 没有多大帮助,因为它包含非数字类型。我正在阅读的语言引用资料首先让我感到困惑:)

(我只是在寻找答案归因于谁,它是 Scarecrow 和 Marc Gravell 的组合,但由于他们是评论,我已将答案放在这里)

关于c# - 数值类型的 "base class"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828807/

相关文章:

c# - 如何保护 Web API 上的 Controller 仅供本地计算机使用

c# - 如何约束分配给 Type 类型变量的类型?

Java数组类型声明

java - 在java中,如何在不同数据类型的数组中创建数组

c# - 如何在 C# 中将 unicode 字符转换为其等效的转义 ascii

c# - 使用 MediaPlayer C# 从数据库播放声音

c# - 组合框下拉列表

.net - 如何在 .NET 单选按钮中获取 DoubleClick 事件?

c# - 序列化 XNA 4.0

c# - 为什么 Assembly.GetTypes() 不会返回封闭泛型类型?