运行

2016-05-06 48 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

我不知道您会从中得到多少用途,因为编译后没有太多数据保留。你基本上得到变量类型,它被声明的序号,以及它是否被固定。优化甚至可以重新排序变量或完全消除它们。 –