私の質問は基本的にC#が配列を初期化する方法です。内部プロパティとしての自己型の配列を持つオブジェクトの初期化:無限の初期化?
具体的には、C#
に単語を格納するための大きなツリーデータ構造を作成しています。 node
オブジェクトとして作成されたこのデータ構造のサブクラスには、int value
とnode[] nexts
の2つのフィールドがあります。
this.nexts = new node[26]
が呼び出されたときに、node
オブジェクトを初期化しないと、以下のように無限の初期化ループが作成されますか?
/// <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;
}
}
}
無限再帰が発生するかどうかを知りたい場合は、既に書いたコードを実行します。あなたは数分の1秒で見つけることができます。 – Servy