这个问题在这里已有答案:
我想知道C#是否有一种方法可以在不使用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}}}
};
我能想到改善它的唯一方法就是这样。这是强类型的,它允许您根据节点的类型具有单独的逻辑(通过执行显式is
检查以确定哪种类型的节点,或通过执行某种操作被描述为抽象方法的OO技术在基地Node
并根据每个应该如何表现,或通过实施Tree
分别在Leaf
和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)
)
)
);
根据您的使用情况,您可以使用元组:
var a = (1, 2, (3, (4, 5), 6), 7);
var b = ((1, 2, (3)), 4, (5), (((6))));
限制是在您创建它们之后,您无法(轻松地)调整它们的大小。