1

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

            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()));
                }
            }
4

3 回答 3

5

string.IsNullOrEmpty(saveCatList[0])您一起检查数组的第一个元素是否为空或为空。看来你的数组是空的,所以你应该首先检查你的数组:

if(saveCatList == null || string.IsNullOrEmpty(saveCatList[0]))
于 2012-07-09T16:19:42.887 回答
1
Cache["Categories" + Session["sessopnID"]] as string[];

此强制转换失败并且“作为字符串”返回 null。因此,当您尝试将关联变量作为数组访问时,您实际上是在执行 null[0],这是一个 NullReferenceException。

如果您添加检查以首先确保数组不为空,这将正常工作。

于 2012-07-09T16:20:35.377 回答
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()));

}
于 2012-07-09T16:23:09.910 回答