我对ulong
类型的行为感到有些困惑。我理解它是64-bit integer used for positive numbers(最大值18,446,744,073,709,551,615)。我刚刚开始使用它,因为我需要非常大的正数,但是我有一些奇怪的行为,我不了解潜在的负数。
ulong big = 1000000; //Perfectly legal
ulong negative = -1; //"Constant value "-1" cannot be converted to a ulong" Makes sense
//Attempt to sneak around the -1 as a constant compile-time error
int negativeInt = -1;
ulong negativeUlongFail = negativeInt; //"Cannot implicitly convert 'int' to 'ulong'.
//An explicit conversion exists (are you missing a cast?)"
//So I add casting
ulong negativeUlong = (ulong)negativeInt; //But this yields 18446744073709551615
//Try and get a negative number indirectly
ulong number = 0;
number = number - 10; //now number is 18446744073709551615 but no underflow error
发生了什么?为什么会出现一些下溢错误,而其他错误甚至不会抛出异常?我可以检测到这些吗?
我专注于通过下溢来获得负数,但是当数字大于最大值且溢出时,我已经看到类似的事情。
我不确定他们是否属于技术上的错误或例外情况,所以如果我使用了错误的术语,请原谅我
答案 0 :(得分:2)
如果您希望抛出下溢(或溢出)异常,请尝试以下方法: -
public void onStop(){
super.onStop()
finish();
}
默认情况下吞下异常(它在未经检查的情况下运行)。
参见官方文档
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/checked