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

时间:2017-02-26 18:41:31

标签: c# types compiler-errors long-integer

我班上有以下声明。

{{1}}

但编译器报告错误

  

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

根据MSDN

enter image description here

据我所知, SOME_VALUE 类型的此范围内。有关为什么我得到这个编译时错误的任何想法?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

添加L后缀:

public class MyClass
{
    private const long SOME_VALUE= (10L * 1024L * 1024L * 1024L);  // 10 GB
    ....
}

没有L后缀(代表long)编译器将表达式视为int一个,并警告整数溢出。