检索所有声明的全局变量(VB.NET)
我试图以一种“被动”的方式列出代码中声明的所有全局变量,我的意思是,不要手动创建一个列表(T个),然后逐个添加到列表中。 我有一个自定义对象,比如Car.vb,我将很多对象声明为全局对象,并在load事件中逐个填充所有“Cars”。但是,在我的代码中,我想在所有“车”中执行循环,好吧,我可以管理一个列表(T),但是如果明天我在全球范围内再添加4辆车,我必须手动将这4辆车添加到列表(T),否则这4辆车将不会是循环的一部分。所以我开始思考是否有办法列出代码中声明的特定类型的所有变量。检索所有声明的全局变量(VB.NET),vb.net,variables,global,Vb.net,Variables,Global,我试图以一种“被动”的方式列出代码中声明的所有全局变量,我的意思是,不要手动创建一个列表(T个),然后逐个添加到列表中。 我有一个自定义对象,比如Car.vb,我将很多对象声明为全局对象,并在load事件中逐个填充所有“Cars”。但是,在我的代码中,我想在所有“车”中执行循环,好吧,我可以管理一个列表(T),但是如果明天我在全球范围内再添加4辆车,我必须手动将这4辆车添加到列表(T),否则这4辆车将不会是循环的一部分。所以我开始思考是否有办法列出代码中声明的特定类型的所有变量。 有什么提示吗?
有什么提示吗?谢谢 终于知道了如何做到这一点:
Dim Cars_List As New List(Of Car)
Dim assbly As Assembly = [Assembly].GetExecutingAssembly()
Dim types As Type() = assbly.GetTypes()
For Each t As Type In types
If t.Name = "Form1" Then
For Each p As FieldInfo In t.GetFields()
If p.FieldType.Name = "Car" Then
Console.WriteLine(p.Name & " - " & p.FieldType.Name)
Cars_List.Add(CallByName(Me, p.Name, vbGet))
End If
Next
End If
Next
有反射。在你问之前,我不会再解释了。你可以搜索这个词并仔细阅读,然后在遇到具体问题时再问具体问题。你是如何做到“全局”的?这听起来像是一个潜在的设计问题,你正在努力解决,而不是试图解决。也许一个方法来创建汽车将是理想的选择。这种方法会自动将新车添加到列表中。类似于@the_lotus所建议的,这是一种更简单、更明显和自我记录的方法,但要小心。如果您实际维护了对这些对象的引用列表,垃圾收集器将永远不会从内存中删除这些对象,从而导致内存泄漏。您可以使用
WeakReference
对象列表来引用它们,但这会增加一点复杂性,在这种情况下,反射可能更可取。然而,正如@David指出的,这有一种非常糟糕的代码味道,所以你的第一反应应该是重新思考你的设计。谢谢大家@jmchilinney反思对我来说是新事物。但是我知道了如何使用它列出所有变量,谢谢你的提示。现在我面临着转换回原始类的困难。将汽车声明为公共的,而不是使用Dim,这样才能工作。