56

LINQPadは驚くべきものであり、特に有用なのはDump()、匿名かどうかに関係なく、ほぼすべてのタイプのオブジェクトと構造体をコンソールにレンダリングする拡張メソッドです。

当初、Visual Studio 2010に移行したときDump、デリゲートを使用して独自のメソッドを作成し、匿名型などの値をレンダリングしようとしました。かなり複雑になっていますが、最初は楽しくて教育的でしたが、確実な実装。.NET ReflectorでLINQPadコードをチェックアウトしたので、実装を正しく行うことができないとさらに確信できます。

機能を提供するために含めることができる無料のライブラリはありDumpますか?

4

4 に答える 4

60

Prettyformatオプションを指定したJson.Netシリアライザーを使用するObjectへの拡張メソッドを作成しました。JSONは、そのようにフォーマットすると読みやすくなります。タイプ情報が恋しいですが、特にこれがいかに簡単かを考えると、それが必要かどうかはわかりません。まだ失敗していません。私はMS'ではなくJson.Netを使用しています。これは、複雑なグラフで循環参照を処理する機能を備えているためです。

using Newtonsoft.Json;

public static class Dumper
{
    public static string ToPrettyString(this object value)
    {
         return JsonConvert.SerializeObject(value, Formatting.Indented);
    }

    public static T Dump<T>(this T value)
    {
        Console.WriteLine(value.ToPrettyString());
        return value;
    }
}
于 2010-04-23T15:28:34.187 に答える
36

ここを見てください(あなたの道は変わるかもしれません):

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

于 2010-04-23T14:49:57.563 に答える
13

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;
}
于 2012-02-24T20:59:53.207 に答える
10

NuGetパッケージとして利用できるObjectDumperという名前のクラスライブラリもあります。

于 2012-02-03T09:02:26.727 に答える