在 C# 中可视化数据结构,例如树和图

Cad*_*ant 3 .net c# linqpad visual-studio

我正在使用 C# 和 LINQPad。如何可视化图表和树?

例如,如果我创建一个像这样的树数据结构:

public class BinaryTree<T>()
{
    public T Value { get; set; }
    public BinaryTree<T> LeftChild { get; set; }
    public BinaryTree<T> RightChild { get; set; }
    
    //Other methods:
}
Run Code Online (Sandbox Code Playgroud)

我想要一种简单的方法来在执行程序时显示它,例如,如下所示:

具有 7 个节点的二叉树图

Joe*_*ari 8

您最好的选择可能是使用Microsoft 自动图形布局。这就是 LINQPad 用于语法树可视化工具的内容。

在 LINQPad 5 中,只需添加对 Microsoft.MSAGL.GraphViewerGDIGraph NuGet 包的引用即可使用此库。然后你可以这样做:

var graph = new Graph ("graph");

graph.AddEdge ("A", "B");
graph.AddEdge ("B", "C");
graph.AddEdge ("A", "C").Attr.Color = Microsoft.Msagl.Drawing.Color.Green;

new GViewer() { Graph = graph, ToolBarIsVisible = false }.Dump();
Run Code Online (Sandbox Code Playgroud)

不幸的是,这在 LINQPad 6(来自 .NET Core 3.1)中不起作用,因为 Microsoft.MSAGL.GraphViewerGDIGraph 是一个 .NET Framework 包,依赖于 WinForms 工具栏控件,该控件已在 .NET Core 3.1 中删除。然而,MSAGL 是开源的,删除依赖关系相当容易,正如我在这里所做的那样:

https://github.com/albahari/automatic-graph-layout