8

変数の名前を文字列として返そうとしています。

したがって、変数がvar1の場合、文字列「var1」を返します。

これを行う方法はありますか?リフレクションは正しい方向に向かっているのではないかと聞きました。

編集:

私は基本的に、整理されたツリービューの実装をより簡単にしようとしています。rootNameとsubNodeTextの2つの文字列を指定するメソッドがあります。rootNameはたまたま変数の名前です。このメソッドの呼び出しは、この変数のwithブロック内から行われます。ユーザーがMethod( "Variable"、subNodeText)の代わりにMethod(.getVariableAsString、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
4

1 に答える 1

11

これは、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
于 2013-01-25T22:14:02.463 に答える