web-dev-qa-db-ja.com

Visual StudioでLINQPad Dump()拡張メソッドを使用するにはどうすればよいですか?

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

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

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

48
gav

こちらをご覧ください(パスは異なる場合があります):

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

34
Raj Kaimal

プリティフォーマットオプションでJson.Netシリアライザーを使用するObjectの拡張メソッドを作成しました。 JSONは、そのようにフォーマットされていれば、読みやすいです。あなたはタイプ情報を見逃しますが、特にそれがどれほど簡単かを考えると、あなたがそれを必要とすることを知りません。まだ失敗していません。 MS 'ではなくJson.Netを使用します。これは、MS'では考えられなかった、または考えていなかった複雑なグラフの循環参照を処理できるためです。

    using Newtonsoft.Json;
    public static class Dumper{
        public static string ToPrettyString(this object value)
        {
             return JsonConvert.SerializeObject(value, Formatting.Indented);
        }
    }
51
Chad Ruppert

diceguydanswer は、 ディスカッション(特にPat Kujawaのコメントとanunayのコメント )から提供され、両方のC#からLINQPadダンプ実装を呼び出す方法を説明していますおよびVB.NET:

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;
}
11

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

10
Carl Tonander