在VB.NET中将变量名存储在字符串中

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.

这将有助于我正在进行的一些调试工作。


我不喜欢成为那个人,但这真的不是你尝试做任何事情的方式。 - Shawn
5个回答

5

好的,你可以直接设置Foo1Name = "Foo1" - 但我强烈怀疑这不是你想要的。

你如何知道你试图查找哪个变量的名称?更大的问题是什么?如果我们谈论的是非局部变量,您想要的可能通过反射实现,但我怀疑要么不可行,要么有更好的方法来解决该问题。


变量将根据异常发生的位置而被识别。我有一个由许多控件组成的表单,并希望将变量的名称存储在数据库表中(自动化负载测试)。反射或类似于System.Enum.GetNames(GetType(EnumName))但是针对变量的方法是我所考虑的。 - Nick Gotch
但是当你说“变量会被知道”时,以什么方式?谁会知道它,以及以何种形式? - Jon Skeet
我有一个名为LogToDB(control, controlName)的方法,它是多余的(因为我的所有调用都像LogToDB(txtFoo,“txtFoo”)一样)。我想避免在这些调用中重复名称,但我猜无论如何都会是多余的。感谢您的帮助! - Nick Gotch

2

这个来自 msdn 的使用反射的示例对你有帮助吗?


1

我认为这取决于你想要调试的内容。两个可能要看的东西是反射堆栈跟踪类。话虽如此,当您的程序被编译时,编译器和运行时不能保证名称必须与原始程序一致。

在调试和发布版本中,情况尤其如此。调试版中.PDB文件(符号)的重点在于包含有关原始程序的更多信息。对于本机C/C++应用程序,强烈建议您为应用程序的每个构建(debug+release)生成符号以帮助调试。在.NET方面,这不是一个大问题,因为有像反射这样的功能。如果我没记错的话,John Robbins也建议您为.NET项目生成符号。

你可能会发现Mike Stall的博客托管调试器示例很有用。


1

一种解决方案是使用关联数组来存储您的变量。我曾经在.NET中这样做过,但我认为我编写了一个自定义类来完成它。

myArray("foo1Name") = "foo1"

然后,您可以只存储变量名称列表,或者将其包装在同一类中。

if( myArray(variableName(x)) == whatImLookingFor ) print variableName(x) & "is it"

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接