C# 文字长值

C# 文字长值,c#,literals,C#,Literals,为什么在这一端有L,我知道它是一个文本值,但是如果数据类型很长,那么它是必需的吗 public const long l = 100000000L; 这会产生什么不同吗 public const long l = 100000000; 两者都将输出相同的IL:a调用int64构造函数:int64(100000000)解释如下。可能主要目的是区分重载方法的long和int参数。2.4.4.2状态: 整数文本的类型确定如下: •如果 literal没有后缀,它有其 值可以表示为:int、uint

为什么在这一端有L,我知道它是一个文本值,但是如果数据类型很长,那么它是必需的吗

public const long l = 100000000L;
这会产生什么不同吗

public const long l = 100000000;

两者都将输出相同的IL:a调用
int64
构造函数:
int64(100000000)

解释如下。可能主要目的是区分重载方法的long和int参数。

2.4.4.2状态:

整数文本的类型确定如下:

•如果 literal没有后缀,它有其 值可以表示为:int、uint、long、ulong

•如果文字是 以U或U作为后缀,它的值位于这些类型中的第一个 可以表示为:uint、ulong

•如果文字后缀为L或 l、 它具有这些类型中的第一个,在这些类型中,它的值可以是 代表:龙,乌龙

•如果文字后缀为UL,UL,UL, ul,LU,LU,LU,或LU,属于ulong类型

因此,正在推断
L
(“如果文本没有后缀”),因此它不是必需的。您的两个示例将执行完全相同的操作(一旦编译)

那你为什么要用L?例如:

public const long doesNotCompile = 3000000000 * 2;
public const long doesCompile = 3000000000L * 2;
在第一行中,文字(即
3000000000
)是
uint
(由于2.4.4.2),而在第二行中,它是
长的
(同样由于2.4.4.2明确指定)

这意味着编译器将允许
doesCompile
进行编译,但不允许
doesNotCompile
进行编译。这是因为
3000000000*2
太大,无法装入
uint


但是对于像你这样的基本用法,它是一个直接的任务——那么是的,它在任何方面都是不需要的。不包括它也没有什么坏处。

因为据我所知,它主要改变默认分配的内存量

它还使得在使用隐式类型声明时,编译器知道要使用哪种类型的值引用。(这对您的应用程序可能很重要)


@Camilo链接的问题并没有真正回答这个问题:“如果数据类型是
long
,是否需要
L
后缀?”@Cueball在阅读答案后是否更清晰?