【问题标题】:Is there a library that provides a formatted Dump( ) function like LinqPad? [duplicate]有没有像 LinqPad 这样提供格式化的 Dump() 函数的库? [复制]
【发布时间】:2011-05-17 15:06:15
【问题描述】:

我在我的代码中处理了很多 Linq 查询,我正在寻找一个库,该库提供类似于 LinqPad 提供的格式化 Dump() 函数。 LinqPad 的 Dump() 扩展方法真的很不错,因为它很好地处理了嵌套集合。

理想情况下,它会以纯文本形式打印出漂亮的表格,但我可以输出 HTML 或其他格式良好的数据。

来自 VS 的 ObjectDumper 示例根本没有切割它。

【问题讨论】:

标签: linq linqpad


【解决方案1】:

这是我一直在使用的:

Special thanks to this thread (especially Pat Kujawa's & anunay's comments)

C#(直接来自 Pat Kujawa 的评论(虽然我让它自己返回,以便它像 linqpad 的版本那样链接)):

public static T Dump<T>(this T o) {
    var localUrl = Path.GetTempFileName() + ".html";
    using (var writer = LINQPad.Util.CreateXhtmlWriter(true))
    {
        writer.Write(o);
        File.WriteAllText(localUrl, writer.ToString());
    }
    Process.Start(localUrl);
    return o;
}

VB(我的转换,因为我在 VB 应用程序中需要它):

Public Module LinqDebugging
    <System.Runtime.CompilerServices.Extension()>
    Public Function Dump(Of T)(ByVal o As T) As T
        Dim localUrl = Path.GetTempFileName() + ".html"
        Using writer = LINQPad.Util.CreateXhtmlWriter(True)
            writer.Write(o)
            File.WriteAllText(localUrl, writer.ToString())
        End Using
        Process.Start(localUrl)
        Return o
    End Function
End Module

您需要在项目中添加 linqpad 可执行文件作为参考以及System.IOSystem.Diagnostics

这将启动您的默认网络浏览器,显示 linqpad 将生成的确切输出。

【讨论】:

  • 为了更轻松地引用 LINQPad.exe,现在有任何适用于 Framework 3.5 和 4.0 构建的 AnyCPU 构建:www.linqpad.net/beta.aspx
  • 我想知道在你自己的代码中使用这个转储方法是否违反了 til eula?来自Linqpad eula:用法您可以使用商业或非商业应用程序或库重新分发未经修改的 LINQPad 可执行文件版本,其唯一目的是允许最终用户运行 LINQPad。为其他目的重新分发需要获得许可方的书面许可。
  • 我建议只使用这个函数来调试问题。每当我们构建最终产品时,LINQPad 都会在项目参考中被列为“不包含”。
【解决方案2】:

正如 diceguyd30 指出的那样,您实际上可以直接在您的代码中访问 LINQPad 可执行文件并让它自己生成 HTML。如果您尝试将 HTML 作为程序正常执行的一部分输出到界面,这将最有效。

如果您的目的是生成可以在程序运行时监控的调试数据,另一种选择是使用Console.Write(object) 方法,然后将Console.Out 设置为可以智能地格式化对象的东西。例如,您可以从 LINQPad 引用您的可执行文件,并使用它来执行您正在调试的方法,并且 LINQPad 会将任何 Console.WriteLine(object) 调用视为对 object.Dump() 的调用。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2011-10-05
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多