運行

2016-05-06 49 views
1

期間通過變量循環是有一種方法通過一組運行時間期間定義的變量的循環,而無需編寫的代碼來處理每個變量 例如控制檯應用程序的下面一行新代碼:運行

Module Module1 

    Sub Main() 
     Dim a!, b#, c%, d&, s$ 

     Console.WriteLine("a " & VarType(a).ToString) 
     Console.WriteLine("b " & VarType(b).ToString) 
     Console.WriteLine("c " & VarType(c).ToString) 
     Console.WriteLine("d " & VarType(d).ToString) 
     Console.WriteLine("s " & VarType(s).ToString) 
     Console.ReadLine() 
    End Sub 
End Module 

僞代碼將是這樣的:

for each Var in DefinedVariables 
'Do Something To the variable 
next 
+1

你可以添加這些變量到一個集合,並通過循環? – p3tch

+0

您要查找的內容稱爲數組,列表或集合等。 – David

+0

查看'MethodBody.LocalVariables' https://msdn.microsoft.com/zh-cn/library/system.reflection。 methodbody.localvariables(v = vs.110).aspx –

回答

0

正如我在評論中說,使用集合。例如

Dim letters As New List(Of String) From {"a", "b", "c", "d"} 

    For Each letter In letters 
     Console.WriteLine(letter) 
    Next 

編輯:

Dim a As String = "a" 
    Dim b As String = "b" 
    Dim c As String = "c" 
    Dim d As String = "d" 
    Dim e As Integer = 123 

    Dim variables As New List(Of Object) From {a, b, c, d, e} 

    For Each value In variables 
     Console.WriteLine(value.ToString) 
    Next 
+0

我熟悉數組和集合,但可以說在運行期間有很多定義的變量與不同的作用域,我只想通過所有這些變量來了解一些東西關於他們......定義一個字符串列表並不是我在這裏尋找的......謝謝 –

+0

你不能將變量添加到集合中嗎?更新的答案反映 – p3tch

+0

它可以工作,但想象有多個過程,每個過程都有自己的變量和一些公共/私有變量,這些變量可以在整個模塊中看到......你如何循環訪問期間可訪問的那些變量定義的運行時間點?我上面的代碼是一個簡單的例子,但我應該詳細闡述它。再次感謝您的幫助 –

1

您可以使用MethodBody.LocalVariables檢索方法體作爲LocalVariableInfo實例列表內聲明的局部變量。不幸的是,您只能通過索引訪問它們,因爲名稱未被存儲。你基本上得到變量類型,它被聲明的序號,以及它是否被固定。優化甚至可以重新排序變量或完全消除它們。

Dim mi As MethodInfo = GetType(Example).GetMethod("MethodBodyExample") 
Dim mb As MethodBody = mi.GetMethodBody() 
Console.WriteLine(vbCrLf & "Method: {0}", mi) 

' Display the general information included in the 
' MethodBody object. 
Console.WriteLine(" Local variables are initialized: {0}", mb.InitLocals) 
Console.WriteLine(" Maximum number of items on the operand stack: {0}", mb.MaxStackSize) 

' Display information about the local variables in the 
' method body. 
Console.WriteLine() 
For Each lvi As LocalVariableInfo In mb.LocalVariables 
    Console.WriteLine("Local variable: {0}", lvi) 
Next 
+0

非常感謝您 –

+1

我不知道您會從中得到多少用途,因爲編譯後沒有太多數據保留。你基本上得到變量類型,它被聲明的序號,以及它是否被固定。優化甚至可以重新排序變量或完全消除它們。 –