3

我有一個應用程序正在實施自己的C#控制檯(通過Roslyn的腳本引擎)。我已經得到了執行語句的代碼並獲得了可能的返回值,現在我想輸出一個「nice」字符串給控制檯。調用「ToString()」的簡單方法通常會產生非常不可讀的輸出。立即窗口輸出編程

對我來說,最好的解決方案是擁有與Visual Studio的「即時窗口」相同的檢查輸出。

因此,舉例來說,如果我的語句評估爲一個新的String [] {「ASD」},然後就調用toString()會給我

System.String[] 

,我想有的等效輸出即時窗口 - 這樣的事情:

{string[1]} 
    [0]: "asd" 

那麼有誰知道如何調用立即窗口使用相同的轉換?

+2

練到實現這一使用「對象自卸車」爲[此處描述的最接近的(http://stackoverflow.com/questions/360277 /什麼是最好的方式轉儲整個對象到一個日誌在c)或[這裏](http://stackoverflow.com/questions/1347375/ c-sharp-object-dumper) – GolfWolf

+0

謝謝,非常有趣。我會留下這個問題,希望找到一個API訪問實際的即時窗口轉換(因爲我的用戶也將使用Visual Studio,所以這將是最好的和「最熟悉的」輸出),但這些鏈接肯定包含了「人類可讀傾銷」的好例子。 – Imi

回答

1

看起來你有一個包含單個字符串的字符串數組,並且你對該數組調用了.ToString()。 嘗試用

[0].ToString() 

更換

.ToString() 

,並看看是否能夠得到預期的結果。

+0

使用字符串數組只是一個快速示例,顯示了即時窗口與ToString()的標準實現的良好輸出。我想到的代碼應該適用於任何類型的對象。 – Imi

+0

請給出一個實際的例子 - 你調用什麼樣的對象.ToString()反對?它是你自己定義的類嗎?在這種情況下,您必須重寫該類中的ToString()方法並返回所需的文本。 – Daniel

+0

我不能舉一個實際的例子,因爲它是一個通用的控制檯,應該看起來不錯,適用於所有類型的對象(或者至少「最」)。任何具體的例子(如上面的字符串[])都會分散* generic *顯示未知對象的問題。我也無法在目標對象上實現任何方法,因爲我不控制該類(並且在我編寫控制檯代碼時該類可能甚至不存在)。當然,我可以使用反射和測試標準類型來編寫自己的顯示代碼,但是我的問題是關於可以重用的內置方法。 – Imi

1

除了以前的評論/回答,您可以使用任何種類的可輸出人類可讀值的串行器。我已經使用Json.NET此:

string humanReadable = JsonConvert.SerializeObject(someObj, Formatting.Indented); 

NuGet包:http://nuget.org/packages/Newtonsoft.Json/