Назначение строки для ArrayList в c # - PullRequest
0 голосов
/ 29 июля 2011

Подскажите пожалуйста, проблема с кодом

ArrayList dtMessages = new ArrayList();
while ((reader.Read()))
{
                    String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString();
                    dtMessages.Add(temp);
}

Я получаю сообщение об ошибке «Ссылка на объект не установлена ​​для экземпляра объекта.»

Извините, но я новичок в c #. Пожалуйста, потерпите меня. Спасибо

РЕДАКТИРОВАТЬ : я просто хочу добавить точку. Переменная dtMessages объявлена ​​как переменная класса. Он не объявлен внутри какой-либо функции. Вы думаете, что это проблема?

РЕДАКТИРОВАТЬ : Код

namespace Faye
{
   public partial class _Default : System.Web.UI.Page
   {
     public List<String> dtMessages=new List<String>();
     private List<String> LoadMessages()
     {
       while ((reader.Read()))
       {
             String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString();
             dtMessages.Add(temp);
       }
     }
}

}

Добавление статического в объявление dtMessages не имеет значения

Ответы [ 4 ]

0 голосов
/ 29 июля 2011

Одно из следующего:

1- объект чтения является нулевым, и вы получите исключение в строке:

while ((reader.Read()))

2- объект чтенияне содержит 3 элемента, в этом случае вы получите ArgumentOutOfRangeException

3 - один из объектов в считывателе имеет значение null, а исключение выдается из-за метода .ToString ()

Я бы положил свои деньги на 3

0 голосов
/ 29 июля 2011

Как предполагает @Anthony, его первый пример не компилируется, так что это не может быть проблемой.

Если строка, генерирующая исключение, равна

dtMessages.Add(temp); 

и исключение: «Ссылка на объект не установлена ​​для экземпляра объекта.», Это означает, что dtAccess имеет значение null, поэтому он не был инициализирован, но это странно, поскольку есть строка:

ArrayList dtMessages = new ArrayList();

Другая возможность состоит в том, что где-то есть назначение, такое как:

dtMessages = null;

Так что я бы проверил все ссылки на dtMessages в поисках назначений.

0 голосов
/ 29 июля 2011

Попробуйте, создайте автоматическое свойство для списка, который будет установлен, и используйте временный список для сбора данных, а затем присвойте его свойству. Таким образом, временный список инициируется, а затем заполняется данными и присваивается свойству, ожидающему данные:)

namespace Faye
{
   public partial class _Default : System.Web.UI.Page
   {
      public List<String> dtMessages { get; set; } //made property available

      private List<String> LoadMessages()
      {
         var tempList = new List<string>();

         while ((reader.Read()))
         {
             String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString();
             tempList.Add(temp);
          }

         dtMessages = tempList; //assign the temp list to the property now
      }
   }
}

Если вышеперечисленные ошибки отсутствуют, то ваш SqlReader равен нулю или один или несколько индексов, на которые вы ссылаетесь, равны нулю. Я бы отладил и убедился, что все они имеют допустимые значения.

0 голосов
/ 29 июля 2011

Похоже, что вы пытаетесь получить доступ к члену объекта из статического метода.

Примерно так:

class Program {

    private List<string> myList = new List<string>();

    static void Main () {

        // will throw error
        myList.Add("String!");

    }
}

Попробуйте вместо этого:

class Program {

    private static List<string> myList = new List<string>();

    static void Main () {

        myList.Add("String!");

    }
}

Хотя я могу ошибаться, поскольку первое не компилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...