两棵树:一棵树的节点包含一个对象列表;第二棵树的对象包含对第一棵树对象的引用。可以在 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。
我想建立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。