public PlaceInfo(string geoEntry) { var fields = geoEntry.Split(fieldsDelimiter); if (fields.Length != fieldCount) { throw new ArgumentException("Invalid GeoName Record"); } PlaceInfoId = int.Parse(fields.GetValue(PlaceInfoFields.PlaceInfoId), CultureInfo.InvariantCulture); Name = fields.GetValue(PlaceInfoFields.Name); AsciiName = fields.GetValue(PlaceInfoFields.AsciiName); AlternateNames = fields.GetValue(PlaceInfoFields.AlternateNames); Latitude = double.Parse(fields.GetValue(PlaceInfoFields.Latitude), CultureInfo.InvariantCulture); Longitude = double.Parse(fields.GetValue(PlaceInfoFields.Longitude), CultureInfo.InvariantCulture); FeatureCode = fields.GetValue(PlaceInfoFields.FeatureCode); FeatureClass = FeatureCode.ToFeatureClass(); CountryCode = fields.GetValue(PlaceInfoFields.CountryCode); AltCountryCodes = fields.GetValue(PlaceInfoFields.AltCountryCodes); Admin1Code = fields.GetValue(PlaceInfoFields.Admin1Code); Admin2Code = fields.GetValue(PlaceInfoFields.Admin2Code); Admin3Code = fields.GetValue(PlaceInfoFields.Admin3Code); Admin4Code = fields.GetValue(PlaceInfoFields.Admin4Code); Population = long.Parse(fields.GetValue(PlaceInfoFields.Population), CultureInfo.InvariantCulture); Elevation = fields.GetValue(PlaceInfoFields.Elevation).GetIntOrNull(); Dem = int.Parse(fields.GetValue(PlaceInfoFields.Dem), CultureInfo.InvariantCulture); TimeZone = fields.GetValue(PlaceInfoFields.TimeZone); ModificationDate = DateTime.ParseExact(fields.GetValue(PlaceInfoFields.ModificationDate), modificationDateFormat, CultureInfo.InvariantCulture); }