为什么可以';我是否显式地将一些数据类型转换为int、byte、float等?C#
我知道,当允许将为什么可以';我是否显式地将一些数据类型转换为int、byte、float等?C#,c#,casting,C#,Casting,我知道,当允许将int转换为short时,不可能像(int)MyString(short)MyBool>等那样转换string或bool 不幸的是,我找不到解释,为什么。所以我在这里问 为什么不允许显式强制转换某些数据类型(我不是问如何将字符串转换为其他类型或类似的内容)?参考: 显式转换(强制转换):显式转换需要强制转换 操作人员当信息可能丢失时,需要强制转换 转换,或者在其他系统的转换可能无法成功时 原因。典型示例包括将数值转换为 具有较低的精度或较小的范围,以及基类的转换 一个派生类的实例
int
转换为short
时,不可能像(int)MyString
(short)MyBool>等那样转换string
或bool
不幸的是,我找不到解释,为什么。所以我在这里问
为什么不允许显式强制转换某些数据类型(我不是问如何将字符串转换为其他类型或类似的内容)?参考: 显式转换(强制转换):显式转换需要强制转换 操作人员当信息可能丢失时,需要强制转换 转换,或者在其他系统的转换可能无法成功时 原因。典型示例包括将数值转换为 具有较低的精度或较小的范围,以及基类的转换 一个派生类的实例 发件人: 某些编译器需要显式转换以支持缩小范围 转换。这是一种特定于语言的转换方式。在里面 一些语言,如C语言和C++,执行显式转换。 使用铸造。当您在转换前加上数据前缀时,将发生强制转换 定义要执行的转换类型的类型。在里面 在Visual Basic中,CType函数用于允许显式转换 不允许隐式使用的数据类型
这是语言设计者做出的一个决定,迫使程序员选择如何进行转换 将此字符串视为int:
“4.99999999999999999999999999999999999999999999999999999999999999999999999999”
。Int32的答案应该是什么<代码>4或5
考虑此字符串到日期的转换:“5/8/12”
。在美国,这将是5月8日,而在英国,这将是8月5日
- 存在于不会损失精度的地方
- 存在安全转换的地方(没有误解数据的风险),但某些精确信息可能会丢失
- 其余情况下存在转换,如字符串到int、bool、date等
字符串
定义为int
?”@ColeJohnson首先,只想知道为什么。其次,我认为如果我能显式地强制转换每种数据类型,它的可读性会更高。@PLB:这正是我们在BASIC等语言中所经历的噩梦。你想回到那个吗?”(我不是问如何将字符串转换为其他类型或类似的东西)“但你的例子是将字符串转换为int…?然而,如果值超出“转换为”类型的约束,则可能会抛出execption不幸的是,Java为其浮点类型选择了向后规则,net也紧随其后。从double
到float
的转换应该扩大,因为对于每个double
,都有一个float
值,该值要么是明确正确的表示,要么在明确正确表示的百万分之一以内。相比之下,对于几乎任何非NANfloat
值,它都可以表示数百万个双值。即使是(浮点)INF也可以表示(双)1E+39、6E+100或除(双)+INF之外的数十亿其他值。