作为我以前问题的后续,我注意到零件(与控制台)除以零。我发现以下两个陈述良好:
Console.WriteLine(1d / 0d);
Console.WriteLine(1f / 0f);
这两个给出编译时间错误:
Console.WriteLine(1 / 0);
Console.WriteLine(1m / 0m);
的通过常数零
分裂
为什么行为有这种差异?
float和double类型允许按0进行0。它返回无限。
对于INT32和十进制,不允许,它会引起例外。编译器在恒定值上不允许除法0,因为它会导致不确定的行为。
public class MyConsts {
public const int i = 1/0; // Constant, compile time evaluation
}
...
Console.WriteLine(MyConsts.i); // What would you expect ?
编译器无法为您的常数表达式计算正确的值。请记住,该值是在运行时编译的,并且未在运行时进行评估,因此不可能提出例外。