3

文字列内にいくつかの変数の名前を保存しようとしています。例えば:

Dim Foo1 as Integer
Dim Foo1Name as String

' -- Do something to set Foo1Name to the name of the other variable --

MessageBox.Show(Foo1Name & " is the variable you are looking for.")
' Outputs:
' Foo1 is the variable you are looking for.

これは、私が取り組んでいるデバッグに役立ちます。

4

5 に答える 5

5

明らかに、単に Foo1Name = "Foo1" を設定できますが、それはあなたが求めているものではないと強く思います。

名前を見つけようとしている変数をどのように知ることができますか? 全体像は?非ローカル変数について話している場合は、リフレクションを使用して必要なことを実行できる可能性がありますが、それは実現不可能であるか、最初から問題を解決するためのより良い方法があると思います。

于 2008-12-09T15:36:49.627 に答える
2

リフレクションを使用したmsdnのこの例は役に立ちますか?

于 2008-12-09T15:44:28.363 に答える
1

これは、デバッグしようとしているものに大きく依存すると思います。注目すべき 2 つの可能性があるのは、ReflectionクラスとStackTraceクラスです。つまり、プログラムがコンパイルされるとき、コンパイラとランタイムは、名前が元のプログラムと一致する必要があることを保証しません。

これは特に、デバッグ ビルドとリリース ビルドの場合に当てはまります。デバッグ バージョンの .PDB ファイル (シンボル) のポイントは、元のプログラムに関する詳細情報を含めることです。ネイティブ C/C++ アプリケーションの場合、デバッグに役立つように、アプリケーションのビルド (デバッグ + リリース) ごとにシンボルを生成することを強くお勧めします。.NET では、リフレクションなどの機能があるため、これはあまり問題になりません。IIRC John Robbinsは、常に .NET プロジェクトのシンボルも生成することを推奨しています。

また、Mike Stall のブログマネージ デバッガーのサンプルも役立つかもしれません。

于 2008-12-09T15:55:13.817 に答える
1

1 つの解決策は、連想配列を使用して変数を格納することです。一度、これを .Net でやったことがありますが、それを行うためのカスタム クラスを書いたと思います。

myArray("foo1Name") = "foo1"

次に、変数名のリストを保存するか、同じクラスにまとめることができます。

if( myArray(variableName(x)) == whatImLookingFor ) print variableName(x) & "is it"
于 2008-12-09T15:45:12.010 に答える
0

変数名の検索については、関数に渡される変数名の検索を参照してください。

これは VB.Net にも当てはまります。

于 2008-12-09T15:46:30.200 に答える