gpt4 book ai didi

C# 内联检查语句不起作用

转载 作者:可可西里 更新时间:2023-11-01 03:05:25 24 4
gpt4 key购买 nike

我有两种测试方法。第一个工作正常。第二个不会抛出异常,但它应该抛出异常。为什么第二个不抛出异常?

[TestMethod]
[ExpectedException(typeof(OverflowException))]
public void LongToInt_OverflowWithCheckedBlock()
{
checked
{
int maxValue = 2147483647;
long longValue = (maxValue + 1);
int intValue = (int)longValue;
}
}

[TestMethod]
[ExpectedException(typeof(OverflowException))]
public void LongToInt_OverflowWithCheckedStatement()
{

int maxValue = 2147483647;
long longValue = (maxValue + 1);
int intValue = checked((int)longValue); // No Exception is thrown, why?
}

最佳答案

第一个抛出而第二个没有抛出的原因是因为您的比较有点偏差。

  • 在第一种方法中,你检查一切
  • 在第二种方法中,您只检查longint 的转换。

如果你像下面这样比较它们,它们是相等的并且都不会抛出:

private static void MethodA()
{
int maxValue = 2147483647;
long longValue = ( maxValue + 1 );
checked
{
int intValue = ( int ) longValue;
}
}

private static void MethodB()
{
int maxValue = 2147483647;
long longValue = ( maxValue + 1 );
int intValue = checked( ( int ) longValue);
}

这是因为这一行:int intValue = checked(( int ) longValue); 不是抛出的那一行,而是这一行:

long longValue = ( maxValue + 1 );

如果我把选中的放在那里,它们都会抛出:

long longValue = checked( maxValue + 1 );

为什么会抛在这里:

它抛出是因为 ( maxValue + 1 ) 将 1 加到一个名为 maxValueint (此处发生异常)并且 之后 将它分配给一个 long,如果你在执行添加 1 它不会抛出:

long longValue = ( (long) maxValue + 1 );

关于C# 内联检查语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com