補助関数:AddKeyValue

関数 AddKeyValue は、関数 Update の実現を補助するもので、辞書 self に要素対 o を登録します。

    internal static class DictOps {
public static bool AddKeyValue(IDictionary self, object o) {
IEnumerator i = Ops.GetEnumerator(o);
if (i.MoveNext()) {
object key = i.Current;
if (i.MoveNext()) {
object value = i.Current;
self[key] = value;
return !i.MoveNext();
}
}
return false;
}

メソッド AddKeyValue のヘッダーを見ると、リターン型が bool になっています。すると、次のような構造が見えてきます。

    bool AddKeyValue(...) {
...
self[key] = value; // 要素対を追加する
...
return false;
}

メソッド本体で要素対を追加できないと、false をリターン値とします。仕様では、2つの要素(キー/値)が指定されるはずです。ここには、次に示す典型的な C# のイディオムが記述してあります。


    IEnumerator i = Ops.GetEnumerator(o);
if (i.MoveNext()) { // 次のキー要素がある
object key = i.Current;
if (i.MoveNext()) { // 次の値要素がある
object value = i.Current;
self[key] = value; // 要素対を追加する

return !i.MoveNext();
}
}

インターフェース IEnumerator i で規定したプロトコルに従って、キー/値の順に、各要素 key/value を順に参照します。そして、インターフェース IDictionary self で規定したプロトコルに従って、要素対を設定します。最後に

    return !i.MoveNext();

とあるので、キー/値の次に、意味のない要素があると、false をリターン値とします。キー/値の他に要素がないと、true をリターン値とします。つまり、2つの要素(キー/値)が指定されたときだけ、その動作を保証します。


Previous〈3/3〉Next