如何在Visual Studio中使用LINQPad Dump()扩展方法?

gav*_*gav 49 c# linqpad

LINQPad非常棒,特别有用的是Dump()扩展方法,它可以将几乎任何类型的对象和结构(匿名或非匿名)呈现给控制台.

最初,当我转移到Visual Studio 2010时,我尝试Dump使用委托制作我自己的方法来获取为匿名类型等呈现的值.尽管它变得非常复杂,虽然它起初很有趣和教育,但我需要一个扎实的实施.检查了.NET Reflector中的LINQPad代码后,我更加确信我不会得到正确的实现.

我可以提供免费的库以提供Dump功能吗?

Cha*_*ert 52

我写了一个Object的扩展方法,它使用带有漂亮格式选项的Json.Net序列化器.当格式化时,JSON很容易读取.你错过了类型信息,但我不知道你需要它,特别是考虑到这是多么容易.我还没有失败过.我使用Json.Net而不是MS',因为它有能力处理复杂图形中的循环引用,其中MS'在我想到它的时候不能或者没有.

    using Newtonsoft.Json;
    public static class Dumper{
        public static string ToPrettyString(this object value)
        {
             return JsonConvert.SerializeObject(value, Formatting.Indented);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Raj*_*mal 34

看这里(你的路径可能会有所不同):

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Samples\1033\CSharpSamples.zip\LinqSamples\ObjectDumper


MiF*_*vil 11

diceguyd30回答来源于讨论(特别是Pat Kujawa的&anunay的评论),并描述了如何从C#和VB.NET调用LINQPad转储实现:

public static string DumpToHtmlString<T>(this T objectToSerialize)
{
    string strHTML = "";
    try
    {
        var writer = LINQPad.Util.CreateXhtmlWriter(true);
        writer.Write(objectToSerialize);
        strHTML = writer.ToString();
    }
    catch (Exception exc)
    {
        Debug.Assert(false, "Investigate why ?" + exc);
    }
    return strHTML;
}
Run Code Online (Sandbox Code Playgroud)

  • 该方法的内容可以替换为 LINQPad.Util.ToHtmlString(true, objectToSerialize) (2认同)

小智 10

还有一个名为ObjectDumper的类库可用作NuGet包.