gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:52:37 26 4
gpt4 key购买 nike

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

据我所知,我必须对所有不同的数字类型进行重载(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com