Подтвердить что ты не робот

Есть ли библиотека, которая предоставляет отформатированную функцию Dump(), такую ​​как LinqPad?

Я работаю с большим количеством запросов Linq в своем коде, и я ищу библиотеку, которая предоставляет отформатированную функцию Dump(), аналогичную функции LinqPad. Метод расширения LinqPad Dump() действительно очень хорош, потому что он очень хорошо обрабатывает вложенные коллекции.

В идеале, он будет печатать красивые таблицы в виде обычного текста, но я бы с удовольствием выплескивал HTML или другие хорошо отформатированные данные.

Образец ObjectDumper из VS не режет его вообще.

4b9b3361

Ответ 1

Это то, что я использовал:

Особая благодарность этой теме (особенно комментарии Пэт Куява и anunay)

С# (прямо из комментария 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.IO и System.Diagnostics

Это запускает ваш веб-браузер по умолчанию, показывающий точный вывод, который будет генерировать linqpad.

Ответ 2

Как указывает diceguyd30, вы можете фактически получить доступ к исполняемому файлу LINQPad непосредственно в своем коде и создать его сам. Это будет работать лучше всего, если вы попытаетесь вывести HTML в интерфейс как часть обычного выполнения вашей программы.

Если ваша цель состоит в том, чтобы создавать отладочные данные, которые вы можете контролировать во время работы вашей программы, другой вариант заключается в использовании метода Console.Write(object), а затем установите Console.Out в нечто, способное интеллектуально отформатировать объекты. Например, вы можете ссылаться на свой исполняемый файл из LINQPad и использовать его для выполнения метода, который вы отлаживаете, а LINQPad будет обрабатывать любые вызовы Console.WriteLine(object) так же, как и вызов object.Dump().