多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# long(C# 参考) **long** 关键字表示一种整型,该类型根据下表显示的大小和范围存储值。 | 类型 | 范围 | 大小 | .NET Framework 类型 | | --- | --- | --- | --- | | **long** | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 有符号 64 位整数 | [System.Int64](https://msdn.microsoft.com/zh-CN/library/system.int64.aspx) | ## 文本 可如下例所示声明并初始化 **long** 类型的变量: ``` long long1 = 4294967296; ``` 如果整数没有后缀,则其类型为以下类型中可表示其值的第一个类型:[int](https://msdn.microsoft.com/zh-CN/library/5kzh1b5w.aspx)、[uint](https://msdn.microsoft.com/zh-CN/library/x0sksh43.aspx)、**long**、[ulong](https://msdn.microsoft.com/zh-CN/library/t98873t4.aspx)。在上例中,它是 **long** 类型,因为它超出了 [uint](https://msdn.microsoft.com/zh-CN/library/x0sksh43.aspx) 的范围(有关整型的存储大小,请参见 [整型表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/exx3b86w.aspx))。 还可以像下面这样,在 **long** 类型中使用后缀 L: ``` long long2 = 4294967296L; ``` 当使用后缀 L 时,将根据整数的大小确定它的类型为 **long** 还是 [ulong](https://msdn.microsoft.com/zh-CN/library/t98873t4.aspx)。在此例中,它是 **long**,因为它小于 [ulong](https://msdn.microsoft.com/zh-CN/library/t98873t4.aspx) 的范围的下限。 此后缀常用于调用重载方法。以下面使用 **long** 和 [int](https://msdn.microsoft.com/zh-CN/library/5kzh1b5w.aspx) 参数的重载方法为例: ``` public static void SampleMethod(int i) {} public static void SampleMethod(long l) {} ``` 使用后缀 L 可保证调用正确的类型,例如: ``` SampleMethod(5); // Calling the method with the int parameter SampleMethod(5L); // Calling the method with the long parameter ``` 可在同一个表达式中同时使用 **long** 类型和其他数值整型,这时表达式的计算结果为 **long**(在关系表达式或布尔表达式中为 [bool](https://msdn.microsoft.com/zh-CN/library/c8f5xwh7.aspx))类型。例如,下列表达式计算为 **long**: ``` 898L + 88 ``` | ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 | | :-- | | 也可用小写字母“l”作后缀。但是,因为字母“l”容易与数字“1”混淆,会生成编译器警告。为清楚起见,请使用“L”。 | 有关兼用浮点型和整型的算术表达式的信息,请参见 [float](https://msdn.microsoft.com/zh-CN/library/b1e65aza.aspx) 和 [double](https://msdn.microsoft.com/zh-CN/library/678hzkk9.aspx)。 ## 转换 存在从 **long** 到 [float](https://msdn.microsoft.com/zh-CN/library/b1e65aza.aspx)、[double](https://msdn.microsoft.com/zh-CN/library/678hzkk9.aspx) 或 [decimal](https://msdn.microsoft.com/zh-CN/library/364x0z75.aspx) 的预定义隐式转换。其他情况下必须使用显式转换。例如,不使用显式类型转换时,下列语句将产生编译错误: ``` int x = 8L; // Error: no implicit conversion from long to int int x = (int)8L; // OK: explicit conversion to int ``` 存在从 [sbyte](https://msdn.microsoft.com/zh-CN/library/d86he86x.aspx)、[byte](https://msdn.microsoft.com/zh-CN/library/5bdb6693.aspx)、[short](https://msdn.microsoft.com/zh-CN/library/ybs77ex4.aspx)、[ushort](https://msdn.microsoft.com/zh-CN/library/cbf1574z.aspx)、[int](https://msdn.microsoft.com/zh-CN/library/5kzh1b5w.aspx)、[uint](https://msdn.microsoft.com/zh-CN/library/x0sksh43.aspx) 或 [char](https://msdn.microsoft.com/zh-CN/library/x9h8tsay.aspx) 到 **long** 的预定义隐式转换。 还请注意,不存在从浮点型到 **long** 类型的隐式转换。例如,除非使用显式强制转换,否则以下语句将生成一个编译器错误: ``` long x = 3.0; // Error: no implicit conversion from double long y = (long)3.0; // OK: explicit conversion ``` ## C# 语言规范 有关详细信息,请参阅 [C# 语言规范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。该语言规范是 C# 语法和用法的权威资料。 ## 请参阅 [Int64](https://msdn.microsoft.com/zh-CN/library/system.int64.aspx) [C# 参考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [C# 关键字](https://msdn.microsoft.com/zh-CN/library/x53a06bb.aspx) [整型表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/exx3b86w.aspx) [内置类型表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/ya5y69ds.aspx) [隐式数值转换表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/y5b434w4.aspx) [显式数值转换表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/yht2cx7b.aspx)