我在表单中有一个共享变量。
Public Class FormHome
Public Shared db_config As Dictionary(Of String, String)
当我尝试从其他表单访问此变量时,
FormHome.db_config.ContainsKey("m")
它在我的系统中运行良好(Windows 7)。但是我在Windows XP(客户端系统)中得到了对象引用错误(System.NullReferenceException)。
在这两个地方,应用程序都使用.NET 4.0框架(版本 - 4.0.30319.18034)。看起来很奇怪。是什么导致了这个错误?
答案 0 :(得分:0)
此代码
Public Shared db_config As Dictionary(Of String, String)
仅声明所请求类型的变量(db_config
)。它不会创建该类型的对象。
在创建对象之前,db_config
仍然为空,因此尝试访问它将导致NullReferenceException
。
要创建对象,您需要使用New
关键字。例如:
db_config = New Dictionary(Of String, String)()
在第一次尝试访问变量的值之前,您需要确保在之前创建此对象。因为您使用的是静态(Shared
)变量,所以在类的实例构造函数中执行它可能为时已晚。只有在创建对象的实例时才会执行常规实例构造函数。
因此,我建议在对象的静态构造函数中执行此操作。正如the language specification更详细地解释的那样,在访问该类的任何静态成员时,保证类的静态构造函数已被运行时执行。
将以下代码添加到FormHome
类:
Shared Sub New()
db_config = New Dictionary(Of String, String)()
End Sub