是否有一个库提供像LinqPad一样的格式化Dump()函数?

时间:2011-05-17 15:06:16

标签: linq linqpad

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

理想情况下,它会以纯文本打印出漂亮的表格,但我可以随意拼出HTML或其他格式正确的数据。

来自VS的ObjectDumper示例根本没有删除它。

2 个答案:

答案 0 :(得分:20)

这就是我一直在使用的:

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

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

答案 1 :(得分:4)

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

如果您的目的是生成可在程序运行时监视的调试数据,则另一个选项是使用Console.Write(object)方法,然后将Console.Out设置为可以智能地格式化对象的内容。例如,您可以从LINQPad引用您的可执行文件,并使用它来执行您正在调试的方法,LINQPad将处理任何Console.WriteLine(object)调用,与调用object.Dump()时相同。 / p>