【问题标题】: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#?两棵树:一棵树的节点包含一个对象列表;第二棵树的对象包含对第一棵树的对象的引用。可以在 C# 中完成吗?
【发布时间】:2019-12-12 00:09:28
【问题描述】:

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

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

树结构将如下所示:

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

树 #2:

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

【问题讨论】:

  • 在 C++ 中,使用 std::shared_ptr<Range>。您的用例就是为什么它们被称为“共享指针”。
  • 您需要一个节点中的树与另一节点中的节点之间的映射。您可以使用 KeyValuePair。我喜欢使用便于查找的字典。字典

标签: c# c++ pointers tree ref


【解决方案1】:

可以。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2017-10-29
    • 2014-09-24
    相关资源
    最近更新 更多