2011-05-17 84 views
14

我在我的代碼中使用了很多Linq查詢,並且正在尋找一個提供類似於LinqPad提供的格式化Dump()函數的庫。 LinqPad的Dump()擴展方法非常好,因爲它非常好地處理嵌套集合。是否有一個庫提供像LinqPad這樣的格式化Dump()函數?

理想情況下,它會以純文本格式打印出漂亮的表格,但我可以隨時吐出HTML或其他格式良好的數據。

VS的ObjectDumper示例根本不會剪切它。

+0

可能您需要:http://msdn.microsoft.com/en-us/library/bb397968(v=vs.90).aspx – Darragh 2014-01-24 15:39:05

回答

20

這是我一直使用的是什麼:

Special thanks to this thread (especially Pat Kujawa's & anunay's comments)

C#(直從帕特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.IOSystem.Diagnostics

這將啓動顯示精確的輸出linqpad會生成默認Web瀏覽器。

+7

爲了更方便地引用LINQPad.exe,現在有兩個AnyCPU都可以編譯框架3.5和4.0的構建:www.linqpad.net/beta.aspx – 2011-05-18 01:27:17

+0

我不知道這個轉儲方法在你自己的代碼中的用法是否違反了直播嗎? 從[Linqpad EULA(http://www.linqpad.net/eula.txt): 用法 可在重新分發可執行與商業或非商業應用程序或庫的所述LINQPad的未修改版本允許最終用戶運行LINQPad的唯一目的。用於其他目的的再分配需要得到許可人的書面許可。 – Nikolaj 2016-03-09 10:34:25

+1

我會建議只使用這個功能來調試問題。每當我們構建最終產品時,LINQPad在項目參考文獻中被列爲「不包含」。 – diceguyd30 2016-03-18 22:13:26

4

正如diceguyd30指出的那樣,您可以直接在您的代碼中直接訪問LINQPad可執行文件,並讓它生成HTML本身。如果您試圖將HTML輸出到界面作爲程序的正常執行的一部分,這將最有效。

如果您的目的是生成可在程序運行時監視的調試數據,另一個選項是使用Console.Write(object)方法,然後將Console.Out設置爲可以智能化格式對象的東西。例如,您可以從LINQPad引用您的可執行文件,並使用它來執行您正在調試的方法,並且LINQPad將把任何Console.WriteLine(object)調用看作與調用object.Dump()時相同。

相關問題