full - linqpad licence
¿Hay una biblioteca que proporcione una función de formateo Dump() como LinqPad? (2)
Esta pregunta ya tiene una respuesta aquí:
Trabajo con muchas consultas de Linq en mi código, y estoy buscando una biblioteca que proporcione una función de formateo Dump () similar a la que ofrece LinqPad. El método de extensión Dump () de LinqPad es realmente bastante bueno, porque maneja muy bien las colecciones anidadas.
Idealmente, imprimiría tablas bonitas en texto plano, pero estaría bien si escupiera HTML u otros datos formateados.
La muestra ObjectDumper de VS no se corta en absoluto.
Esto es lo que he estado usando:
Un agradecimiento especial a este hilo (especialmente los comentarios de Pat Kujawa y del anuncio)
C # (Directamente del comentario de Pat Kujawa (aunque lo hice regresar para que encadene como lo hace la versión de 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 (mi conversión desde que la necesitaba en una aplicación 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
Tendrá que agregar el ejecutable de linqpad como referencia en su proyecto , así como System.IO
y System.Diagnostics
Esto inicia su navegador web predeterminado que muestra el resultado exacto que generaría linqpad.
Como dice diceguyd30, puedes acceder al ejecutable LINQPad directamente en tu código y hacer que produzca el HTML. Esto funcionaría mejor si está tratando de enviar el HTML a la interfaz como parte de la ejecución normal de su programa.
Si su propósito es producir datos de depuración que pueda monitorear mientras se ejecuta su programa, otra opción es usar el método Console.Write(object)
y luego configurar Console.Out
para algo que pueda formatear objetos inteligentemente. Por ejemplo, puede hacer referencia a su ejecutable desde LINQPad, y usarlo para ejecutar un método que está depurando, y LINQPad tratará cualquier llamada de Console.WriteLine(object)
la misma manera que lo haría con una llamada a object.Dump()
.