Main.xamlから呼び出したProcess.xaml内で使うDictionary変数について

こんにちは。
前任者作成のWFを参考に、Main.xamlでConfig.xlsxや設定.xlsxに記述されている
valueをString変数「key」に取得し、さらにその値をDictionary変数「dic_config」に取得し、Main.xamlから呼び出したProcess.xaml内で使っています。

ここから、質問内容の説明に入ります。
前任者はProcess.xaml内でDictionary変数「dic_config」を使う際に、

str_?? = dic_config(“str_??”).ToString

と、直接Dictionary変数「dic_config」を操作していましたが、通常、Main.xamlで作成した変数は、引数としてサブルーチンに渡すのが一般的と思います。
Main.xamlで作成したDictionary変数を、サブルーチン内でも同じDictionary変数として扱うのは、Dictionary変数独自のルールという理解で正しいでしょうか?

こんにちは

質問の意図がつかみにくいのですが、
Main.xamlで作成したDictionaryのスコープがMain.xaml内であるならば、他のxamlからそれを直接
参照することはできません。
引数として渡すか、あるいは最近のバージョンですとグローバルスコープの変数を定義できますので
そちらを使用しているかのどちらかではないかと思います。

前任者がDictionary変数をProcess.xaml内でそのまま使っていたので奇妙に思い、質問をさせていただきました。もしかしたら、Dictionary変数をグローバルスコープに指定しているのかもしれません。変数をグローバルスコープに指定する方法をご教授ください。

データマネージャーで指定/確認します。

image

ありがとうございます。
変数「dic_Config」のグローバルスコープ指定ができました。この変数は
この変数を使うxaml内での変数パネルにも登録が必要ですか?

global scope

不要です。

なお一般的にグローバルスコープの変数の利用は保守性の低下を招く可能性がありますので
ご注意ください(設定情報等は比較的その影響を受けにくい種別かとは思いますが)

Dictionary変数をグローバルスコープ登録する際に、インスタンス生成もやっておいた方が良いでしょうか?(画像参照)それとも不要でしょうか?

global scope

通常の変数定義と同様です。必須ではありませんので、実際のロジックに応じて判断ください。

申し訳ありませんが、初心者のため、どのような場合にインスタンスを生成すべきか知りません。変数の初期化と同じ感覚で捉えています。どのような場合にインスタンスを生成すべきかがわかるリンクの共有をお願いします。

例えばDataTable dtからDictionaryに変換するような以下の式の場合

dict = dt.AsEnumerable(Function(r) r("key").ToString(), Function(r) r("value").ToString())

Dicitonaryインスタンスがdictに引き渡されますので、事前にインスタンス生成する必要はありません(結局破棄されるので無駄になります)

一方

dict("key") = "some value"

のようにインスタンスにKey Valueを追加するのであれば、既存インスタンスが必要なので
どこかで事前に dict = New Dictionary(Of String, String)() のような処理が必要になります。

分かりにくいですが、For Each Rowアクティビティで回して、DataTable変数をDictionary変数に代入する添付画像の場合は、KeyにValueを追加しているため、Dictionaryインスタンス生成必須でしょうか?

dic

事前に必要になります。