我正在努力寻找这个问题的解决方案。我在这个网站上看到很多关于这个主题的类似条目,但我似乎无法找到解决方案。我正在尝试检查缓存中的表以查看它是否已存在,如果没有,则填充它。下面是我检查的代码,它在'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()));
}
}
答案 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()));
}