数组检查:对象引用未设置为对象的实例

时间:2012-07-09 16:17:59

标签: c# arrays

我正在努力寻找这个问题的解决方案。我在这个网站上看到很多关于这个主题的类似条目,但我似乎无法找到解决方案。我正在尝试检查缓存中的表以查看它是否已存在,如果没有,则填充它。下面是我检查的代码,它在'if'语句中的错误告诉我'System.NullReferenceException:对象引用没有设置为对象的实例'。这令人费解,因为'。IsNullOrEmpty'不应该抓住这个吗?我想如果数组中的第一个元素为null或为空,那么它还没有被缓存,因此采取行动。

            string[] saveCatList = Cache["Categories" + Session["sessopnID"]] as string[];
            if (string.IsNullOrEmpty(saveCatList[0]))
            {
                WBDEMOReference.getcatlist_itemcategories[] categories;
                strResult = callWebServ.getcatlist(Session["sessionID"].ToString(),
                            out strResultText, out dNumOfCat, out categories);

                for (int i = 0; i < categories.Length; i++)
                {
                    //ddCat is the ID number of the category drop down list
                    ddCat.Items.Add(new ListItem(categories[i].categorydesc.ToString(),
                                                 categories[i].categorynumber.ToString()));
                }
            }

3 个答案:

答案 0 :(得分:5)

使用string.IsNullOrEmpty(saveCatList[0])检查数组的第一个元素是空还是空。您的数组似乎是null,因此您应首先检查您的数组:

if(saveCatList == null || string.IsNullOrEmpty(saveCatList[0]))

答案 1 :(得分:1)

Cache["Categories" + Session["sessopnID"]] as string[];

此强制转换失败,'as string'返回null。因此,当您尝试以数组形式访问关联变量时,您实际上是在执行null [0],这是一个NullReferenceException。

如果添加一个检查,首先确保该数组不为null,这将正常工作。

答案 2 :(得分:0)

更改

if (string.IsNullOrEmpty(saveCatList[0]))

if (saveCatList != null && saveCatList.Length>0 && string.IsNullOrEmpty(saveCatList[0]))

另外,改变

  ddCat.Items.Add(new ListItem(categories[i].categorydesc.ToString(),
                                             categories[i].categorynumber.ToString()));

if (categories[i].categorydesc != null && categories[i].categorynumber!= null)
{
  ddCat.Items.Add(new ListItem(categories[i].categorydesc.ToString(),
                                             categories[i].categorynumber.ToString()));

}