【发布时间】:2011-05-17 15:06:15
【问题描述】:
我在我的代码中处理了很多 Linq 查询,我正在寻找一个库,该库提供类似于 LinqPad 提供的格式化 Dump() 函数。 LinqPad 的 Dump() 扩展方法真的很不错,因为它很好地处理了嵌套集合。
理想情况下,它会以纯文本形式打印出漂亮的表格,但我可以输出 HTML 或其他格式良好的数据。
来自 VS 的 ObjectDumper 示例根本没有切割它。
【问题讨论】:
我在我的代码中处理了很多 Linq 查询,我正在寻找一个库,该库提供类似于 LinqPad 提供的格式化 Dump() 函数。 LinqPad 的 Dump() 扩展方法真的很不错,因为它很好地处理了嵌套集合。
理想情况下,它会以纯文本形式打印出漂亮的表格,但我可以输出 HTML 或其他格式良好的数据。
来自 VS 的 ObjectDumper 示例根本没有切割它。
【问题讨论】:
这是我一直在使用的:
Special thanks to this thread (especially Pat Kujawa's & anunay's comments)
C#(直接来自 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 将生成的确切输出。
【讨论】:
正如 diceguyd30 指出的那样,您实际上可以直接在您的代码中访问 LINQPad 可执行文件并让它自己生成 HTML。如果您尝试将 HTML 作为程序正常执行的一部分输出到界面,这将最有效。
如果您的目的是生成可以在程序运行时监控的调试数据,另一种选择是使用Console.Write(object) 方法,然后将Console.Out 设置为可以智能地格式化对象的东西。例如,您可以从 LINQPad 引用您的可执行文件,并使用它来执行您正在调试的方法,并且 LINQPad 会将任何 Console.WriteLine(object) 调用视为对 object.Dump() 的调用。
【讨论】: