我的问题基本上是关于C#初始化数组的方式。
具体来说,我正在创建一个大型树数据结构来存储C#
中的单词。作为node
个对象创建的此数据结构的子类有两个字段:int value
和node[] nexts
。
如果没有初始化node
对象,如下所示,在调用this.nexts = new node[26]
时会创建一个无限的初始化循环?
/// <summary>
/// Represents a node object for a letter.
/// </summary>
private class node {
public int value;
internal node[] nexts;
public node(bool z, int n = 0, node[] ns = null) {
this.value = n;
if (z) {
if (ns == null) { this.nexts = new node[26]; }
else { this.nexts = ns; }
}
}
}
如果没有,这是初始化一个属性为其自身数组的对象的正确方法,那么在初始化后该数组的每个元素都处于什么状态?
如果您有兴趣,以下是整个课程:
/// <summary>
/// Represents a node object for a letter.
/// </summary>
private class node {
public int value;
internal node[] nexts;
public node(bool z, int n = 0, node[] ns = null) {
this.value = n;
if (z) {
if (ns == null) { this.nexts = new node[26]; }
else { this.nexts = ns; }
}
}
public node operator++(node n) {
n.value++;
return n;
}
public node this[int i] {
get {
if (this.nexts == null) { this.nexts = new node[26]; }
return this.nexts[i];
}
set {
if (this.nexts == null) { this.nexts = new node[26]; }
this.nexts[i] = value;
}
}
}
答案 0 :(得分:2)
如果调用
this.nexts = new node[26]
,不会初始化节点对象(如下所示)会创建一个无限的初始化循环吗?
不,因为node
是引用类型,new node[26]
只创建一个最多可包含26个node
引用的数组;它本身不会创建任何node
个对象。
如果没有,这是初始化一个属性为其自身数组的对象的正确方法,那么在初始化后该数组的每个元素都处于什么状态?
数组的每个元素都包含null
引用。