为什么我不能隐式地将double转换为int?

Evo*_*lor 4 c# java casting implicit-conversion explicit-conversion

您可以隐式地将int转换为double: double x = 5;

您可以显式地将int转换为double: double x = (double) 5;

您可以显式地将double转换为int: int x = (int) 5.0;

为什么不能隐式地将double转换为int?: int x = 5.0;

Ayd*_*din 17

只有在保证转换不会导致数据丢失时,才能使用隐式转换.所以,你可以施放integer到一个doubleinteger一个long数据类型.然而,从a转换为a doubleinteger冒丢失数据的风险.

Console.WriteLine ((int)5.5);  
// Output > 5
Run Code Online (Sandbox Code Playgroud)

这就是Microsoft没有为此特定转换编写隐式转换的原因..NET框架会强制您使用显式强制转换来确保您通过从一种类型明确地转换为另一种类型来做出明智的决策.

implicit关键字用于声明隐式用户定义的类型转换运算符.如果保证转换不会导致数据丢失,使用它来启用用户定义类型与其他类型之间的隐式转换.

来源 > MSDN


Sel*_*enç 16

范围double宽于int.这就是你需要明确演员的原因.由于同样的原因,你不能隐式地转换longint:

long l = 234;
int x = l; // error
Run Code Online (Sandbox Code Playgroud)

  • 原因可能与编写显式强制转换表达式意味着您同意可能的数据丢失有关 (4认同)