0

我知道在允许投射string到.bool(int)MyString (short)MyBoolintshort

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

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

4

2 回答 2

6

请参阅:强制转换和类型转换(C# 编程指南)

显式转换(强制转换):显式转换需要强制转换运算符。当转换中可能会丢失信息,或者由于其他原因转换可能不成功时,需要进行强制转换。典型示例包括将数值转换为精度较低或范围较小的类型,以及将基类实例转换为派生类。

来自:显式转换

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

于 2012-06-05T14:01:50.050 回答
4

这是语言设计者为强制程序员选择如何进行转换而做出的决定。

将此字符串视为 int: "4.99999999999999999999999999999999999999999999999999999999"。Int32 的答案应该是什么?4还是5

考虑这个字符串到日期的转换:"5/8/12". 在美国,这将是May 8th,而在英国,它将是August 5th

于 2012-06-05T14:04:46.117 回答