ここでは、1 つの辞書を使用して、カスタム クラス内の属性として保持されている 2 つの異なる辞書を設定するコードを少し使用しています。私は効率のためにこれを行います。
注: 設定したい属性ごとにディクショナリを使用することで、この問題の回避策がありますが、これはあまり効率的ではありません。
大まかに私のコードは次のとおりです。
for iKey = 1 to class.maxnumber ' 8
dTempDict.add iKey, cdbl(24) ' enforce to 24 for calcs later
next iKey
Set class.dict1 = dTempDict ' commit to class.dict1
dTempDict.removeall 'wipe temp dictionary
for iKey = 1 to class.maxnumber ' 8
dTempDict.add iKey, "word" ' something other than 24 to test
next iKey
Set class.dict2 = dTempDict
したがって、上記は正常に機能します。次に、ループしてclass.dict1のキーを問題なく出力しようとしました。次に、値を事前に宣言された dbl に割り当てようとしたときに、問題が発生しました。次に、byref を渡す別のサブクラスで、次のように各キーをループしました。
dim dTempDict as scripting.dictionary
Set dTempDict = class.dict1
for each iKey in dTempDict
msgbox typename(dTempDict.Item(iKey))
next iKey
これにより、結果が返されました...「文字列」...紛らわしい。次に、値ホルダーを文字列に変更しましたが、うまくいきました。クラス内のアクセサーを確認しましたが、間違ったディクショナリ属性にループバックしないため、2 番目に割り当てて .removeall を実行しても、2 番目のディクショナリの値が最初のディクショナリに取り込まれます。
何か案は?
上記のように、class.dict1 と class.dict2 に異なる一時辞書を使用すると、正しく割り当てられますが、これはまだ混乱を招きます。