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

时间:2013-04-03 17:01:49

标签: .net vb.net

我在表单中有一个共享变量。

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)。看起来很奇怪。是什么导致了这个错误?

1 个答案:

答案 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