为什么我不能显式地将一些数据类型(如string,int,byte,float等)转换为? C#

时间:2012-06-05 13:57:31

标签: c# casting

我知道在允许string转换为bool的同时,无法投放(int)MyString(short)MyBool,例如int short等等}。

不幸的是我找不到解释,为什么。所以我在这里问。

为什么不允许显式转换某些数据类型(我不是问如何将字符串转换为其他类型或类似的东西)?

2 个答案:

答案 0 :(得分:6)

参考:Casting and Type Conversions (C# Programming Guide)

  

显式转换(强制转换):显式转换需要强制转换   运营商。当信息可能丢失时,需要进行强制转换   转换,或转换可能对其他转换不成功   原因。典型的例子包括数字转换为一种类型   具有较低的精度或较小的范围,以及基类的转换   实例到派生类。

来自:Explicit Conversion

  

某些编译器需要进行显式转换以支持缩小范围   转换。它是一种特定于语言的执行转换的方法。在   某些语言,如C#和C ++,执行显式转换   使用铸造。使用数据为转换添加前缀时会发生强制转换   用于定义要执行的转换类型的类型。在   Visual Basic,CType函数用于允许显式转换   隐式不允许的数据类型。

答案 1 :(得分:4)

这是语言设计者决定迫使程序员选择如何进行转换的决定。

将此字符串视为int:"4.99999999999999999999999999999999999999999999999999999999"。 Int32应该怎么回答? 45

考虑此字符串到目前为止的转换:"5/8/12"。在美国,这将是May 8th,而在英国,则为August 5th

  • Implicit casts存在不会丢失精度的地方。

  • Explicit casts存在安全转换(不存在误解数据的风险),但某些精确信息可能会丢失。

  • 其他案例存在转化,例如字符串为int,bool,日期等。

相关问题