【问题标题】:Performing expression evaluation/reduction in Visual Studio 2008在 Visual Studio 2008 中执行表达式求值/归约
【发布时间】:2009-06-10 20:34:04
【问题描述】:

是否可以让 Visual Studio 进行数学表达式求值/归约?

例如,如果我输入“-0.005 + -0.345”,我如何让 Visual Studio 减少它(即用减少量替换它)?我必须写一个宏吗?如果是这样,是否有任何预先存在的宏来执行这种类型的表达式缩减?

为了清楚起见,我希望能够突出显示表达式并将其替换为缩减的结果。许多人建议立即窗口,但我看不出这如何足够?

编辑我应该指出,这是在编辑时没有运行或调试。即时窗口几乎没有用处。我也认为这是一个语言中立的问题。我当然有兴趣看到我发布的宏的替代宏。

编辑一次...去两次...(即在我考虑接受我自己的答案之前有任何其他建议吗?)

【问题讨论】:

    标签: visual-studio expression evaluation reduction


    【解决方案1】:

    感谢以上回答。

    可能有更好的方法,但这里有一个快速而肮脏的宏,可以满足我的需要。

    需要添加对 System.Data 和 System.XML 命名空间的引用。

    突出显示您要评估的表达式并运行宏(它使用 DataTable 中的计算列来评估表达式。)它将用简化的结果替换表达式。

    编辑 - 更新了下面的代码。它对于减少大量表达式非常有效。正如其他人指出的那样,有即时窗口,但这不适用于编辑目的。此宏是基本表达式“()、+、-、*、/”的语言独立解决方案。

    
    Sub Eval()
      Dim ts As EnvDTE.TextSelection = DTE.ActiveDocument.Selection
      Using dt As New DataTable()
        dt.Columns.Add("Expression", GetType(Double), ts.Text)
        dt.Rows.Add(dt.NewRow)
        ts.Text = CDbl(dt.Rows(0).Item("Expression"))
      End Using
    End Sub
    

    【讨论】:

      【解决方案2】:

      默认情况下,Visual Studio 不会进行任何数学表达式求值/归约。我不确定您是否可以通过 ReSharper 之类的项目获得对此的支持,但如果可用,它将包含在加载项中。

      另外,了解您所使用的语言会有所帮助吗?

      某些语言可能会在这方面有所帮助。例如,F# 可以轻松地通过交互式窗口在 IDE 中评估表达式,并将结果显示出来。这可以很容易地添加回您的代码中,但它似乎并不完全是您正在寻找的。

      【讨论】:

      • @neodynium,那么此时 IDE 没有表达式缩减选项。
      【解决方案3】:

      这是一个答案:是的,可以使用以下步骤。 (虽然在技术上执行您的要求,但我不确定它是否会非常有用。:-)

      1. 在您的程序中设置一个断点,当您调试程序时可能会遇到该断点。
      2. 然后,在 Visual Studio 调试器下运行您的程序。
      3. 遇到断点后,打开 Watch 窗口。
      4. 在 Watch 窗口中,通过单击 Name 列添加新手表。
      5. 输入您的表达式“-0.005 + -0.345”(不带引号),然后按 [Enter]。 ...您应该会看到 Value 列填充了 -0.35。

      当然,这不在编辑器窗口的上下文中……大概是您想要执行缩减的地方。再说一次,我想不是很有用。加载项是在编辑器窗口中执行此操作的可能方式。

      【讨论】:

      • 附注立即窗口也会计算表达式,但同样对编辑没有那么有用。
      【解决方案4】:

      您可以直接转到即时窗口并输入“?

      【讨论】:

      • @RBarryYoung - 我希望能够突出显示和表达并将其替换为缩小的结果。您如何通过即时窗口实现这一目标?
      • 你不能,但是你最初没有提到这个要求,这就是我问的原因。如果没有这种情况,即时窗口就可以正常工作,您可以剪切并粘贴到它,执行,然后根据需要剪切并粘贴答案。在 VS.Net 的早期版本中进行编辑时,它并不总是有效,但他们不久前重新添加了此功能(VB6 以及所有早期版本的 VB、QB 和所有其他 BASIC 一直以来一直具有此功能)。
      • 我确实提到了它“(即用归约替换)”,尽管它可能不是最清楚的解释。我同意可以使用即时窗口复制和粘贴有限数量的表达式,但对于一堆表达式来说,这将是非常低效的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多