gpt4 book ai didi

c# - Visual Studio 如何在调试期间显示 System.Double?

转载 作者:太空狗 更新时间:2023-10-29 20:14:12 24 4
gpt4 key购买 nike

尝试调试以下简单程序,并在每个步骤中将鼠标悬停在 x 上(或为 x 或其他任何内容“添加监视”)。

using System;
using System.Globalization;

static class Program
{
static double x;

static void Main()
{
x = 2d;

// now debugger shows "2.0", as if it has used
// x.ToString("F1", CultureInfo.InvariantCulture)

x = 8.0 / 7.0;

// now debugger shows "1.1428571428571428", as if it had used
// x.ToString("R", CultureInfo.InvariantCulture)
// Note that 17 significant figures are shown, not the usual 15.

x = -1e-200 / 1e200;

// now debugger shows "0.0"; there is no indication that this is really negative zero
//

Console.WriteLine(1.0 / x); // this is negative infinity
}
}

所以,显然 VS 有自己的方式来显示 System.Double。为此它调用了哪个方法?有没有办法以编程方式获得完全相同的字符串表示形式?

(使用 Visual Studio 2010 Professional 对此进行了尝试。)

最佳答案

C# 和 VB.Net EE 的核心都使用 _ecvt_s 函数将 double 格式化为字符串。

两者都对生成的字符串进行了一些清理,使显示更像 C# 和 VB,并更好地处理一些极端情况。 _ecvt_s 函数或清理代码可能是造成您看到的差异的原因。一眼难辨

有些人可能会问为什么我们要经历所有这些麻烦,而不是说只是对值调用 ToString 并显示它。我们不这样做有几个原因。

首先是简单的函数评估,甚至是 ToString,是 EE 可以执行的单个最昂贵的操作。常见真实场景的剖析表明,我们98%以上的时间都花在了功能评估上。任何时候我们都可以避免因为性能影响而进行的函数评估。

第二个原因很简单,函数求值并不总是可用。在许多情况下,func eval 不可用,但人们仍然希望看到原始类型的显示,如 doubleint 等......将它们移除基本上会杀死调试体验。因此,我们需要在没有 ToString 支持的情况下解决这个问题。

关于c# - Visual Studio 如何在调试期间显示 System.Double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10251879/

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