Вы сделали свойства частными. Если вы хотите, чтобы они были публичными, попробуйте:
public List<GeoInfo> GeoInfos { get; set; }
Автоматически реализованное значение, которое хранится локально в объекте, будет частным; но сами свойства являются общедоступными.
Потому что то, что вы объявляете, есть средства доступа к собственности.
Если вы хотите написать все в явном виде, вы можете сделать это старым способом до 3.0
private List<GeoInfo> geoInfos = new List<GeoInfo>;
public List<GeoInfo> GeoInfos {
get { return geoInfos; }
set { geoInfos = value; }
}
Это все еще зависит от инициализации geoInfos где-то (как конструктор) - или nullPointerException
вернется.
Вы можете выполнить ленивую оценку прямо в геттере:
private List<GeoInfo> geoInfos = new List<GeoInfo>;
public List<GeoInfo> GeoInfos {
get { if (geoInfos == null) {
geoInfos = new List<GeoInfo>;
}
return geoInfos;
}
set { geoInfos = value; }
}
Это гарантирует, что вам не нужно указывать вызов в конструкторе, и вам не нужно беспокоиться о последовательности выполнения, устанавливающей элемент явно до его получения.
Но если вы используете автоматически сгенерированные свойства, вам придется явно установить ссылку в какой-то момент. Как указано в другом месте, лучшая ставка - конструктор.