.net 访问共享变量引发对象引用错误

.net 访问共享变量引发对象引用错误,.net,vb.net,.net,Vb.net,我有一个表单中的共享变量 Public Class FormHome Public Shared db_config As Dictionary(Of String, String) 当我试图从另一个窗体访问此变量时 FormHome.db_config.ContainsKey("m") 它在我的系统(Windows7)中运行良好。但我在WindowsXP(客户端系统)中得到的对象引用错误(System.NullReferenceException)正好是这一行 在这两个地方,应

我有一个表单中的共享变量

Public Class FormHome
      Public Shared db_config As Dictionary(Of String, String)
当我试图从另一个窗体访问此变量时

FormHome.db_config.ContainsKey("m")
它在我的系统(Windows7)中运行良好。但我在WindowsXP(客户端系统)中得到的对象引用错误(System.NullReferenceException)正好是这一行

在这两个地方,应用程序都使用.NET 4.0 framework(版本-4.0.30319.18034)。看起来很奇怪。什么原因导致此错误?

此代码

Public Shared db_config As Dictionary(Of String, String)
仅声明请求类型的变量(
db_config
)。它不会创建该类型的对象

在创建对象之前,
db_config
仍然为空,因此尝试访问它将导致
NullReferenceException

要创建对象,需要使用
New
关键字。例如:

db_config = New Dictionary(Of String, String)()
您需要确保在首次尝试访问变量值之前创建此对象。因为您使用的是静态(
Shared
)变量,所以在类的实例构造函数中执行它可能太晚了。常规实例构造函数仅在创建对象实例时执行

因此,我建议在对象的静态构造函数中执行此操作。正如更详细的解释,类的静态构造函数保证在访问该类的任何静态成员时已由运行时执行

将以下代码添加到
FormHome
类中:

Shared Sub New()
    db_config = New Dictionary(Of String, String)()
End Sub

您使用的是没有定义的变量吗?例如,当您在代码中说“db_config=new Dictionary(Of String,String)(”)时,在调用FormHome.show()之前,我在登录表单中初始化此变量并填充其值。然后,当我尝试从另一个新表单访问它时,我得到了这个错误,我真的无法想象这个问题。在进行一些搜索时,if发现了这篇文章,其中提出了不同的.NETFramework 4.0.X版本的想法。在上面的链接中,问题#10:System.NullReferenceException-对象引用未设置为对象的实例。@MuhammadOmar我阅读了该链接。这与我正在做的事情无关