Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索所有声明的全局变量(VB.NET)_Vb.net_Variables_Global - Fatal编程技术网

检索所有声明的全局变量(VB.NET)

检索所有声明的全局变量(VB.NET),vb.net,variables,global,Vb.net,Variables,Global,我试图以一种“被动”的方式列出代码中声明的所有全局变量,我的意思是,不要手动创建一个列表(T个),然后逐个添加到列表中。 我有一个自定义对象,比如Car.vb,我将很多对象声明为全局对象,并在load事件中逐个填充所有“Cars”。但是,在我的代码中,我想在所有“车”中执行循环,好吧,我可以管理一个列表(T),但是如果明天我在全球范围内再添加4辆车,我必须手动将这4辆车添加到列表(T),否则这4辆车将不会是循环的一部分。所以我开始思考是否有办法列出代码中声明的特定类型的所有变量。 有什么提示吗?

我试图以一种“被动”的方式列出代码中声明的所有全局变量,我的意思是,不要手动创建一个列表(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,这样才能工作。