Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我是否显式地将一些数据类型转换为int、byte、float等?C#_C#_Casting - Fatal编程技术网

为什么可以';我是否显式地将一些数据类型转换为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等


因为它们包含不同类型的数据?它还与C等具有严格类型安全规则的语言有关。显然,原因是“如何将
字符串
定义为
int
?”@ColeJohnson首先,只想知道为什么。其次,我认为如果我能显式地强制转换每种数据类型,它的可读性会更高。@PLB:这正是我们在BASIC等语言中所经历的噩梦。你想回到那个吗?”(我不是问如何将字符串转换为其他类型或类似的东西)“但你的例子是将字符串转换为int…?然而,如果值超出“转换为”类型的约束,则可能会抛出execption不幸的是,Java为其浮点类型选择了向后规则,net也紧随其后。从
double
float
的转换应该扩大,因为对于每个
double
,都有一个
float
值,该值要么是明确正确的表示,要么在明确正确表示的百万分之一以内。相比之下,对于几乎任何非NAN
float
值,它都可以表示数百万个
双值。即使是(浮点)INF也可以表示(双)1E+39、6E+100或除(双)+INF之外的数十亿其他值。