为什么C#不需要显式转换来转换为Long To Double?

起初,抱歉我的英语不好。 我有代码片段:

long x = 9223372036854775807L; double f = x; Console.WriteLine(x); Console.WriteLine(f); 

输出是:

 9223372036854775807 9,22337203685478E+18 

编译和执行此代码时,我没有收到任何错误。 在将Long转换为Double时,我们的精度会下降。 为什么C#在这种情况下不需要显式转换?

谢谢大家。

该语言内置了一些隐式转换。

下表来自文档 ,这就是为什么允许您在没有显式强制转换或转换的情况下分配值的原因:

 From To =============================================================================== sbyte short , int, long, float, double, or decimal byte short , ushort, int, uint, long, ulong, float, double, or decimal short int , long, float, double, or decimal ushort int , uint, long, ulong, float, double, or decimal int long , float, double, or decimal uint long , ulong, float, double, or decimal long float , double, or decimal char ushort , int, uint, long, ulong, float, double, or decimal float double ulong float , double, or decimal 

它在文件中说明(强调我的):

从int,uint,long或ulong到float以及从long或ulong到double的转换中,精度但不是大小可能会丢失。

Console.WriteLine具有服务器重载方法,您正在使用static Console Class的重载方法

  1. Console.WriteLine(System.Int64 value);
  2. Console.WriteLine(Systen.Double value);

它与类型转换(显式或隐式)无关