尝试将变量名作为字符串获取 VB.NET

8
我正在尝试将变量名作为字符串返回。因此,如果变量是var1,则我想返回字符串"var1"。是否有任何方法可以实现这一点?我听说Reflection可能是正确的方向。
编辑:本质上,我正在尝试使有组织的树形视图的实现更简单。我有一个方法,您可以在其中提供两个字符串:rootName和subNodeText。rootName恰好是变量的名称。对该方法的调用来自于针对此变量的with块内。我希望用户能够调用Method(.getVariableAsString, subNodeText)而不是Method("Variable", subNodeText)。希望以编程方式获取它的原因是这段代码可以简单地复制并粘贴。我不想每次变量被命名为异常名称时都要进行调整。
Function aFunction()
   Dim variable as Object '<- This isn't always "variable".
   Dim someText as String = "Contents of the node"

   With variable '<- Isn't always "variable". Could be "var", "v", "nonsense", etc
      'I want to call this
      Method(.GetName, someText)
      'Not this
      Method("Variable",someText)

   End With
End Function

3
你为什么需要这个? - Federico Berasategui
我主要是想让有组织的树形视图的实现变得更简单。我有一个方法,你需要提供两个字符串:rootName和subNodeText。rootName恰好是一个变量的名称。调用此方法是在该变量的with块内部进行的。我希望用户能够调用Method(.getVariableAsString, subNodeText)而不是Method("Variable", subNodeText)。之所以想要以编程方式获取它,是因为这段代码可以简单地复制和粘贴。我不想每次变量被命名为异常名称时都必须进行调整。 - ATD
你知道,有许多现代编程方法论的出现是为了解决在旧的、更过程化的方式下可能会相当困难的问题。请发布相关代码,这样我们就可以帮助您解决问题。 - Federico Berasategui
@HighCore 在主问题中编辑了一些示例代码。 - ATD
“希望以编程方式获取它的原因是为了使这段代码可以简单地复制和粘贴。” 如果您的代码需要从一个地方复制并粘贴到另一个地方,那么这种做法是错误的。您将无法获取变量名称,因为这没有意义。请展示您的树形视图代码,以便我们更好地理解。 - Federico Berasategui
1个回答

12

从 VB.NET 14 开始,现在可以实现此功能(更多信息请看这里):

Dim variable as Object
Console.Write(NameOf(variable)) ' prints "variable"
当您的代码被编译时,您分配的所有变量名称都会更改。无法在运行时获取局部变量名称。但是,您可以使用System.Reflection.PropertyInfo获取类的属性名称。
 Dim props() As System.Reflection.PropertyInfo = Me.GetType.GetProperties(BindingFlags.Public Or _
                                                                                     BindingFlags.Instance Or BindingFlags.DeclaredOnly)

 For Each p As System.Reflection.PropertyInfo In props
     Console.Write(p.name)
 Next

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