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

问题描述

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

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

树结构将如下所示:

在此处输入图像描述

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

树#2:

在此处输入图像描述

C# 是我的首选语言,我知道您可以使用该ref关键字,但我想知道 C# 是否真的是正确的语言,还是我需要像 C++ 这样的指针?

标签: c#c++pointerstreeref

解决方案


是的你可以。

您将 Range 声明为class(而不是struct),因此您将只处理引用(而不是实际值)。

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

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

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

您可能希望快速回顾一下引用与值语义


推荐阅读