ошибка: ссылка на объект не инициализирована - PullRequest
1 голос
/ 25 октября 2010

У меня есть следующий код в C #:

IList <string> myList = null;
myList.Add (температура);

temp - это строка, которая в других местах декальбирована и не имеет значения null (я проверил ее). Я продолжаю получать следующую ошибку в строке myList.Add (temp); «Ссылка на объект не инициализирована для экземпляра объекта»

Что я здесь не так делаю ???

Обновление квеста: я уже попробовал новый
IList <string> myList = новый список <string> ();
как большинство из вас предложили и получите следующее от Intellisense:

Невозможно создать экземпляр абстрактного класса или интерфейса Systems.Collections.Generic.Ilist.

Спасибо за ваши предыдущие ответы. Сейчас я сталкиваюсь с особой проблемой. В моем хранилище данных есть пустая строка. (1 поле в таблице сервера sql пустое. Это строка. Пусто). Есть ли способ избавиться от этого внутри ридера (я имею в виду rdr здесь) ??

Ответы [ 4 ]

4 голосов
/ 25 октября 2010

сначала нужно инициализировать список:

IList<string> myList = new List<string>();
...

Обратите внимание, что справа от = вы должны написать List<string>, а не IList<string>, поскольку IList<string> - это интерфейс, тогда как List<string> - это класс, реализующий этот интерфейс.

1 голос
/ 25 октября 2010

Строка:

IList<string> myList = null;

не дает вам список, но пустая ссылка на то, где список может быть.

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

правильно создаст экземпляр myList, так что вы можетеиспользуйте его (Добавить, Удалить и т. д.).

0 голосов
/ 26 октября 2010

Обновление квеста: я уже попробовал новый Ilist (), поскольку большинство из вас предложили и получают из Intellisense следующее: Не удается создать экземпляр абстрактного класса или интерфейса Systems.Collections.Generic.Ilist

Вы не можете создавать экземпляры интерфейса.IList - это интерфейс.Как уже говорили другие, вы инициализируете его экземпляром конкретного класса, который наследует интерфейс.Обратите внимание, как они используют новый список (), а не новый IList ();

IList<String> items = new List<String>();
0 голосов
/ 25 октября 2010

Здесь, посмотрите на этот учебник, чтобы лучше понять инициализацию переменных.

С http://www.csharphelp.com/2007/03/objects-classes-in-c/

Person Michael = new Person();

В первой строке кода мы указали целочисленную переменную, называемую age. Во второй строке мы сначала указали тип объекта, который нам нужно создать, за которым следует имя объекта, за которым следует зарезервированный оператор с именем new, и в конце мы снова вводим имя класса, а затем ставим скобки «()».

Давайте разберемся с этим постепенно. Указав имя класса в начале, скажите компилятору C # выделить место в памяти для этого типа (компилятор C # знает все переменные, свойства и методы класса, поэтому он выделит нужный объем памяти). Затем мы следовали за именем класса за именем переменной объекта, которое мы хотим. Остальная часть кода ”= new Person ();” вызывает конструктор объекта. Мы поговорим о конструкторе позже, но пока не понимаем, что конструктор - это способ инициализации переменной вашего объекта, пока вы создаете его не после того, как создаете его. Например, Michaelobject, который мы создали в последнем разделе, можно записать следующим образом:

Person Michael = new Person(20, “Brown”);

здесь я указал значения переменной в списках параметров, поэтому я инициализировал переменные во время создания объекта. Но для того, чтобы этот код работал, нам нужно будет указать конструктор в классе Person, и я не буду здесь этого делать, потому что секция конструктора появится в следующих статьях. Я думаю, что вы получили хорошее представление о классах и объектах, о котором я не буду рассказывать в своей следующей статье, и я расскажу о конструкторах и построении blockscoping. Я надеюсь, что вы получили новую вещь из моей статьи.

...