1

この問題の解決策を見つけるのに苦労しています。このサイトには、この件に関連する同様のエントリがたくさんありますが、解決策にたどり着けないようです。キャッシュ内のテーブルをチェックして、既に存在するかどうかを確認し、存在しない場合はデータを入力しようとしています。以下はそのチェックのコードで、「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()));
                }
            }
4

3 に答える 3

5

string.IsNullOrEmpty(saveCatList[0])配列の最初の要素が空かnullかを確認します。配列がnullのようです。最初に配列を確認する必要があります:

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

このキャストは失敗し、「文字列として」はnullを返します。したがって、関連付けられた変数に配列としてアクセスしようとすると、基本的にnull[0]を実行します。これはNullReferenceExceptionです。

最初に配列がnullでないことを確認するためのチェックを追加すると、これは正常に機能します。

于 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 に答える