变量突然变成了什么

时间:2013-07-22 21:38:34

标签: asp.net vb.net

  

对象实例未设置为Asp.Net中的对象错误实例

我现在每次都在ASP.Net Web应用程序中收到此错误,并且无法理解如何。堆栈跟踪引导我访问此代码,该行是对HashTable的Add方法的一个或另一个调用。代码位于模块中,哈希表在该模块中声明为私有变量。

我添加了Debug.Asserts,但到目前为止,这些只是将错误的行号进一步向下推到调用Add方法的另一行。我没有在派生类中重写Hashtable的Add方法。以“gstr”开头的参数是在另一个模块中实例化的字符串常量。

如何通过一次调用Add方法(这意味着_hshBaseTables不能为空)然后提出这个异常?

<System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _
Friend Module modFieldAliases

#Region "Private Data"

'Tables created by InitFieldAliasHashTable and destroyed by calling UnInitFieldAliasHashTable
'private variable to hold lookup table for field aliases.
Private _hshFieldAliases As System.Collections.Hashtable 'use this to obtain underlying field information given the field alias
Private _hshTableAliases As System.Collections.Hashtable 'use this to obtain the base table and column given table alias
Private _hshBaseTables As System.Collections.Hashtable 'use this to obtain table alias from base table
Private _hshBaseColumns As System.Collections.Hashtable 'use this to obtain field alias from base table and column pair  

...

If _hshBaseTables IsNot Nothing Then

    _hshBaseTables = System.Collections.Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable(50)

    Debug.Assert(_hshBaseTables IsNot Nothing)
    _hshBaseTables.Add("Alias", gstrALIAS)
    Debug.Assert(_hshBaseTables IsNot Nothing)
    _hshBaseTables.Add("BlobData", gstrBLOBDATA)
    Debug.Assert(_hshBaseTables IsNot Nothing)
    _hshBaseTables.Add("ContactLink", gstrCONTACTLINK)
    Debug.Assert(_hshBaseTables IsNot Nothing)
    _hshBaseTables.Add("CustomForms", gstrCUSTOMFORMS)...

这是堆栈跟踪:

at modFieldAliases.InitFieldAliasHashTable() in C:\Ajexus 4.59\CriteriaSet\FieldAliases.vb:line 2701
at Ajexus.CriteriaSet._initialize() in C:\Ajexus 4.59\CriteriaSet\CriteriaSet.vb:line 41
at Ajexus.CriteriaSet..ctor() in C:\Ajexus 4.59\CriteriaSet\CriteriaSet.vb:line 46
at Model.GetData(String method, Dictionary`2 data) in C:\Ajexus 4.59\Ajexus MVP Framework\Model.vb:line 424
at Ajexus.Framework.ReportsHelper.GetUserCriteriaListContents(String strFieldAlias, CriteriaSet csPredefinedReportCriteria, CriteriaSet csReportCriteria) in C:\Ajexus 4.59\Ajexus MVP Framework\ReportsHelper.vb:line 560
at Ajexus.Framework.Presenters.Summary2ViewPresenter._fillUserCriteriaList(CriteriaSet csPredefinedReport, String strFieldAlias, String strFieldLabel, String strDisplayMember, String strValueMember) in C:\Ajexus 4.59\Ajexus MVP Framework\Presenters\Summary2.aspx.presenter.vb:line 173
at Ajexus.Framework.Presenters.Summary2ViewPresenter.OnFillUserCriteriaFieldList(Object sender, AjexusFieldEventArgs e) in C:\Ajexus 4.59\Ajexus MVP Framework\Presenters\Summary2.aspx.presenter.vb:line 836
at Ajexus.Web.Views.Summary2.fvwUserCriteria_PreRender(Object sender, EventArgs e) in C:\Ajexus 4.59\AjexusWeb\Summary2.aspx.vb:line 80
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

其他信息 捕获到异常时,_hshBaseTables变量为Nothing,堆栈跟踪通常表示与以前不同的行。但总是在检查Nothing之后以及在几乎相同的代码行之后没有抛出异常。这表明在这个线程调用Add方法之间,它是否必须被另一个线程设置为Nothing? hshBaseTables是一个朋友模块中的私有变量,它也包含在我的应用程序使用的另一个组件中。

2 个答案:

答案 0 :(得分:1)

安德鲁和约翰在评论中指出的答案是上面的代码包含在VB.Net Module中。 这意味着所有成员都是Shared。所有用户和所有请求只有一个副本可用。 在某些时候,此变量被设置为Nothing,而另一个请求线程仍在尝试使用它。 在这种情况下,只有一个副本可供所有用户使用,但我必须确保_hshBaseTables未设置为Nothing

答案 1 :(得分:0)

您的代码没有从以下声明返回任何内容

_hshBaseTables = System.Collections.Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable(50)

检查并确保它不会返回任何内容