两棵树:一棵树的节点包含一个对象列表;第二棵树的对象包含对第一棵树对象的引用。可以在 C# 中完成吗?

Two Trees: one Tree's nodes contains a List of objects; the 2nd Tree's objects contains references to the first Tree's objects. Can it be done in C#?

我想建立2个树结构。第一棵树将包含节点,每个节点都有我的 Range 对象的列表:

class Range {
     public DateTime Start { get; set; }
     public DateTime End { get; set; }
}

树结构如下所示:

然后我想要从 第一棵树 构建第二棵树。它将具有类似的结构,但是,当对第二棵树中的 Range 对象进行更改时,我希望第一棵树中的 Range 对象也发生变化。实际上,我需要在第一棵树中保存对 Range 对象的引用或指针:

树#2:

C# 是我的首选语言,我知道您可以使用 ref 关键字,但我想知道 C# 是否真的适合此语言,或者我是否需要像 C++ 这样的指针?

可以。

您将 Range 声明为 class(与 struct 相对),因此您将仅处理引用(与实际值相对)。

例如,您的 List<Range> 是对 Range 个对象的引用集合。

Range 具有引用语义在 C# 中意味着一些事情,例如:

  • 它只比较等于完全相同的实例
  • 一个Range变量可以容纳null
  • 你总是传递引用,如果这不是你想要的,你需要明确地克隆它
  • ...

您可能想快速回顾一下 reference vs. value semantics