我知道在允许投射string
到.bool
(int)MyString
(short)MyBool
int
short
不幸的是,我找不到解释,为什么。所以我在这里问。
为什么不允许显式转换某些数据类型(我不是在问如何将字符串转换为其他类型或类似的东西)?
显式转换(强制转换):显式转换需要强制转换运算符。当转换中可能会丢失信息,或者由于其他原因转换可能不成功时,需要进行强制转换。典型示例包括将数值转换为精度较低或范围较小的类型,以及将基类实例转换为派生类。
来自:显式转换
一些编译器需要显式转换来支持缩小转换。它是一种特定于语言的转换方式。在某些语言中,例如 C# 和 C++,显式转换是使用强制转换来执行的。当您使用定义要执行的转换类型的数据类型为转换添加前缀时,就会发生强制转换。在 Visual Basic 中,CType 函数用于允许隐式不允许的数据类型的显式转换。
这是语言设计者为强制程序员选择如何进行转换而做出的决定。
将此字符串视为 int: "4.99999999999999999999999999999999999999999999999999999999"
。Int32 的答案应该是什么?4
还是5
?
考虑这个字符串到日期的转换:"5/8/12"
. 在美国,这将是May 8th
,而在英国,它将是August 5th
。
隐式转换存在于不会损失精度的地方。
在安全转换(没有误解数据的风险)的情况下存在显式转换,但可能会丢失一些精确信息。
其余情况存在转换,例如字符串到 int、bool、日期等。