Словарь лучше подходит для данных со структурой ключ-значение, когда нам может понадобиться получить значение с помощью ключа ...
Очевидно, latitude
не является ключом дляlongitude
поэтому коллекция Dictionary
не лучший выбор, если ключ не будет содержать что-то значимое.
Мы можем создать собственную структуру Coordinate
для хранения наших значений.Примером структуры, подобной этой, является System.Drawing.Point .
public struct Coordinate
{
public string Latitude { get; }
public string Longitude { get; }
public Coordinate(string latitude, string longitude)
{
this.Latitude = latitude;
this.Longitude = longitude;
}
}
Поскольку мы не хотим, чтобы наша коллекция позволяла добавлять одно и то же значение в два раза больше, чем List<T>
либо лучший выбор.
Мы можем извлечь выгоду из использования HashSet<T>
, который имеет высокопроизводительные операции над множествами и не содержит повторяющихся элементов:
HashSet<Coordinate> WayPoints = new HashSet<Coordinate>();
public Form1()
{
InitializeComponent();
}
...
WayPoints.Add(new Coordinate(.. , ..));
Теперь, если нам нужно WayPoints
длясуществуют даже после закрытия формы, мы должны переместить ее за пределы Form
в какой-либо другой объект.
Если в коллекции WayPoints
должны быть значения после перезапуска приложения - требуется постоянное хранениеи мы можем сериализовать и сохранить наши значения в базе данных или в файл.
Пример очень простого статического хранилища:
public static class DataStorage
{
public static HashSet<Coordinate> WayPoints { get; }
static DataStorage()
{
WayPoints = new HashSet<Coordinate>();
}
public static Coordinate? TryGetCoordinate(string latitude, string longitude)
{
var coordinate = new Coordinate(latitude, longitude);
return WayPoints.Contains(coordinate) ? (Coordinate?)coordinate : null;
}
}
PS
Мы могли бы перебрать всеWayPoints
с использованием foreach
и присваиваем каждой координате некоторую Textbox.Text
.
В случае, когда нам нужно получить определенные Coordinate
из WayPoints
, все, что нам нужно сделать, это создать новый экземплярCoordinate
и проверьте, существует ли он в WayPoints
colразночтение.Мы реализовали это в методе TryGetCoordinate
.
Используйте это так:
Coordinate? foundInStorage = DataStorage.TryGetCoordinate("123.5", "300");
if(foundInStorage != null)
{
// something with foundInStorage.Value
}