C# 为什么编译器在变量处于长数据类型范围内时会抱怨

C# 为什么编译器在变量处于长数据类型范围内时会抱怨,c#,types,compiler-errors,long-integer,C#,Types,Compiler Errors,Long Integer,我在班上有以下声明 public class MyClass { private const long SOME_VALUE= (10 * 1024 * 1024 * 1024); // 10 GB .... } 然而,编译器正在报告以下错误 错误CS0220:在检查模式下,操作在编译时溢出 根据 据我所知,对于long类型,某些值在这个范围内。有没有想过为什么会出现这个编译时错误?计算中的每个值都是int,因此编译器将它们相乘为ints,因此溢出。最简单的解决方案是使用将

我在班上有以下声明

public class MyClass
{
    private const long SOME_VALUE= (10 * 1024 * 1024 * 1024);  // 10 GB
    ....
}
然而,编译器正在报告以下错误

错误CS0220:在检查模式下,操作在编译时溢出

根据


据我所知,对于long类型,某些值在这个范围内。有没有想过为什么会出现这个编译时错误?

计算中的每个值都是
int
,因此编译器将它们相乘为
int
s,因此溢出。最简单的解决方案是使用将其中一个或全部标记为
long
,这将强制计算为
long

private const long SOME_VALUE= 10L * 1024 * 1024 * 1024;

添加
L
后缀:

public class MyClass
{
    private const long SOME_VALUE= (10L * 1024L * 1024L * 1024L);  // 10 GB
    ....
}
如果没有
L
后缀(代表
long
),编译器将表达式视为
int
one,并警告整数溢出