Is there a library that provides a formatted Dump( ) function like LinqPad? [duplicate]

淺唱寂寞╮ 提交于 2020-01-19 04:58:05

问题


I work with a lot of Linq queries in my code, and I'm looking for a library that provides a formatted Dump() function similar to what LinqPad offers. LinqPad's Dump() extension method is really quite nice, because it handles nested collections very well.

Ideally, it would print out pretty tables in plain text, but I'd be ok with spitting out HTML or other nicely formatted data.

The ObjectDumper sample from VS does not cut it at all.


回答1:


This is what I've been using:

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

C# (Straight from Pat Kujawa's comment (though I made it return itself so that it chains like linqpad's version does)):

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 (my conversion since I needed it in a VB app):

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

You will need to add the linqpad executable as a reference in your project as well as System.IO and System.Diagnostics

This launches your default web browser showing the exact output that linqpad would generate.




回答2:


As diceguyd30 points out, you can actually access the LINQPad executable directly in your code and have it produce the HTML itself. This would work best if you're trying to output the HTML to the interface as part of normal execution of your program.

If your purpose is to produce debug data that you can monitor while your program runs, another option is to use the Console.Write(object) method, and then set your Console.Out to something that can format objects intelligently. For example, you can reference your executable from LINQPad, and use it to execute a method that you're debugging, and LINQPad will treat any Console.WriteLine(object) calls the same as it would a call to object.Dump().



来源:https://stackoverflow.com/questions/6032908/is-there-a-library-that-provides-a-formatted-dump-function-like-linqpad

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!