我知道在允许string
转换为bool
的同时,无法投放(int)MyString
或(short)MyBool
,例如int
short
等等}。
不幸的是我找不到解释,为什么。所以我在这里问。
为什么不允许显式转换某些数据类型(我不是问如何将字符串转换为其他类型或类似的东西)?
答案 0 :(得分:6)
参考:Casting and Type Conversions (C# Programming Guide)
显式转换(强制转换):显式转换需要强制转换 运营商。当信息可能丢失时,需要进行强制转换 转换,或转换可能对其他转换不成功 原因。典型的例子包括数字转换为一种类型 具有较低的精度或较小的范围,以及基类的转换 实例到派生类。
某些编译器需要进行显式转换以支持缩小范围 转换。它是一种特定于语言的执行转换的方法。在 某些语言,如C#和C ++,执行显式转换 使用铸造。使用数据为转换添加前缀时会发生强制转换 用于定义要执行的转换类型的类型。在 Visual Basic,CType函数用于允许显式转换 隐式不允许的数据类型。
答案 1 :(得分:4)
这是语言设计者决定迫使程序员选择如何进行转换的决定。
将此字符串视为int:"4.99999999999999999999999999999999999999999999999999999999"
。 Int32应该怎么回答? 4
或5
?
考虑此字符串到目前为止的转换:"5/8/12"
。在美国,这将是May 8th
,而在英国,则为August 5th
。
Implicit casts存在不会丢失精度的地方。
Explicit casts存在安全转换(不存在误解数据的风险),但某些精确信息可能会丢失。
其他案例存在转化,例如字符串为int,bool,日期等。