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

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

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

Образец ObjectDumper от VS вообще не урезает.


person Garrett Serack    schedule 17.05.2011    source источник
comment
Возможно, вам нужно следующее: msdn.microsoft.com/ en-us/library/bb397968(v=vs.90).aspx   -  person Darragh    schedule 24.01.2014


Ответы (2)


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

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

С# (прямо из комментария Пэта Куджавы (хотя я заставил его вернуться, чтобы он цеплялся, как версия 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.

person diceguyd30    schedule 17.05.2011
comment
Чтобы упростить обращение к LINQPad.exe, теперь доступна любая сборка AnyCPU для сборок Framework 3.5 и 4.0: www.linqpad.net/beta.aspx - person Joe Albahari; 18.05.2011
comment
Интересно, не нарушает ли использование этого метода дампа внутри вашего собственного кода til eula? Из Linqpad eula: Использование Вы можете распространять немодифицированную версию исполняемого файла LINQPad с коммерческой или - коммерческое приложение или библиотека с единственной целью - позволить конечным пользователям запускать LINQPad. Для распространения в других целях требуется письменное разрешение лицензиара. - person Nikolaj; 09.03.2016
comment
Я бы рекомендовал использовать эту функцию только для отладки. Всякий раз, когда мы создавали окончательный продукт, LINQPad был указан как не включаемый в ссылки проекта. - person diceguyd30; 19.03.2016

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

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

person StriplingWarrior    schedule 17.05.2011