C# 是否支持嵌套的强类型树结构?

Does C# support nested strongly typed tree structure?

我想知道 C# 是否有定义 强类型 嵌套锯齿数组 without using object[] 的方法.

类似于:

var nested = new {1, 2, {3, {4, 5}, 6}, 7};

我想要一个 int.

的嵌套数组

考虑下面这个数组: [[1, 2, [3]], 4, [5], [[[6]]]]

我是这样做的:

var myNestedJagged = new object[]
{
    new object[]
    {
        1, 2, new object[] {3}
    },
    4,
    new object[] {5},
    new object[] {new object[] {new object[] {6}}}
};

根据您的用途,您可以使用元组:

var a = (1, 2, (3, (4, 5), 6), 7);
var b = ((1, 2, (3)), 4, (5), (((6))));

限制是创建它们后不能(轻松地)调整它们的大小。

我想像这样改进它的唯一方法。这是强类型的,它允许您根据节点类型拥有单独的逻辑(通过显式 is 检查以确定哪种类型的节点,或者通过执行某种描述操作的 OO 技术作为基础 Node 中的抽象方法,并根据各自的行为方式在 TreeLeaf 中单独实现,或者通过实现 Visitor pattern)。

// all items are nodes
abstract class Node
{
}

// a tree is just a collection of nodes; it has no value
class Tree : Node
{
    public Tree(params Node[] children)
    {
        Children = children;
    }
    public IReadOnlyCollection<Node> Children { get; }
}

// a leaf is just a value; it has no children
class Leaf : Node
{
    public Leaf(int value)
    {
        Value = value;
    }
    public int Value { get; }
}

但是,构造有点丑。

var myTree = new Tree(
    new Tree(
        new Leaf(1),
        new Leaf(2),
        new Tree(
            new Leaf(3)
        )
    ),
    new Leaf(4),
    new Tree(
        new Leaf(5)
    ),
    new Tree(
        new Tree(
            new Leaf(6)
        )
    )
);