簡體   English   中英

如何在 C# 交互式控制台中模擬 object 的打印?

[英]How to simulate the printing of object like in C# Interactive Console?

一個例子:

在此處輸入圖像描述

如果我們在 C# 控制台中鍵入scoreDir ,它的內容會打印得很漂亮,即 object 的定義、它的長度和它的數據。

我想用內置的 .NET 方法模擬這種打印,例如ToString() 但是,如圖所示, ToString()不起作用。 “模擬”意味着我可以生成相同的打印字符串,但將其存儲在變量中。 微軟一定用過一些function來打印這樣的object; 最好只重復使用 function(不要重新發明輪子)。

沒有這樣的構建工具,但您可以將其轉換為 Json。 您的示例的問題對於 ConcurrentDictionary 來說並不那么容易。

重要的提示:
This only will work for Newtonsoft and .NET 6.0 since System.Text.Json does not provide a cast for serialize to JSON ConcurrentDictionary and this also don't work for Newtonsoft in .NET Framework

如何序列化為 JSON 字符串 ConcurrentDictionary?

從 Nugget 導入Newtonsoft.Json

using Newtonsoft.Json; 到文件頭部的引用

     ConcurrentDictionary<(int,int), (double,int)> scoreDir = new ConcurrentDictionary<(int,int), (double,int)>();
    scoreDir.TryAdd((1,2),(0.9,3));
     string jsonString = JsonConvert.SerializeObject(scoreDir);
    Console.WriteLine(jsonString);

回報:

{"(1, 2)":{"Item1":0.9,"Item2":3}}

小提琴: https://dotnetfiddle.net/XzHHoN

在評論部分感謝@Hans Passant

In Visual Studio, after installing the Nuget package Microsoft.CodeAnalysis.CSharp.Scripting , the static function Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.CSharpObjectFormatter.Instance.FormatObject() can be used to mimic the same output as C# Interactive Console.

這是有效的代碼:

using System;
using System.IO;
using System.Collections.Concurrent;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var scoreDir = new ConcurrentDictionary<(int, int), (double, int)>();
            scoreDir.TryAdd((1, 2), (0.9, 3));
            var res = Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.CSharpObjectFormatter.Instance.FormatObject(scoreDir);
            Console.WriteLine(res);
        }
    }
}

結果:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM