为什么只有在VS2010中进行调试时,强制转换才会返回零?

时间:2010-10-20 15:55:55

标签: c# visual-studio visual-studio-2010

只有在我的机器上才会发生这种情况。 基本上如果我运行以下所有内容都符合预期:

        double d = 500.22;
        int i = (int)d;
        Console.WriteLine(i.ToString());

输出为500。

但是,如果我在第一行放置一个断点并逐步执行,我总是恢复为零,输出为0.

我在其他机器上测试了这个,我无法复制,我甚至重新安装了VS2010,但它仍然会发生。所以我认为它必须是我在我的系统上的某种环境设置,但我无法弄清楚是什么。

其他人都有这个问题,我该如何摆脱它。

干杯。

编辑:问题似乎只是第二行。如果我在第1行放置一个断点,然后在它上面放置F5,那么一切都好。但是如果我进入/超过第二条线,则施法似乎不起作用并且我保持在0 我还尝试先将i设置为1,然后查看是否有效,但它会将我更改为0并删除我的初始值1。

以下是截图:

alt text

3 个答案:

答案 0 :(得分:1)

您是否拥有所有最新的.NET Framework服务补丁?有一些甚至是4.0框架,虽然我还没有听说过这样的事情。

*编辑*
关于我的其他建议,转换为int truncates和Convert.ToInt32轮,所以Convert.ToInt32是你通常想要的(特别是如果它工作)。

答案 1 :(得分:0)

尝试使用/SafeMode/ResetSettings命令行参数

运行VS.

答案 2 :(得分:0)

请注意,在您的屏幕截图中,您没有输出 i ,而是输出 d - 您实际上并未使用 i 。我无法重复你所描述的行为,但如果我在发布模式下在WriteLine上设置断点,我就会接近:在这种情况下, i 甚至不存在。但为什么要这样,你没有使用它。 (注意我使用了你的屏幕截图中的代码来进行repro,而不是实际使用 i 的代码。)