@ Джефф Фриц прав в своем ответе, но я просто хотел добавить немного больше о совместном доступе к этому полю между несколькими потоками. StringDictionary является только поточно-ориентированным для операций чтения, но не для операций записи, поэтому вы должны быть осторожны, чтобы не изменять эту коллекцию без надлежащей блокировки, а также заблокировать коллекцию при итерации над ним.
Для повторения:
lock(Common.Domains) {
foreach(var domain in Common.Domains) {
}
}
Чтобы добавить домен за пределами статический конструктор:
lock(Common.Domains) {
Common.Domains.Add("111", "Location 3");
}
В общем, я буду очень осторожен, когда делюсь коллекцией, не предназначенной только для чтения, через статическое поле, чтобы поле не изменялось. Вы можете вместо этого сделать StringDictionary a ReadOnlyCollection и пометить поле «только для чтения»:
public static readonly ReadOnlyCollection<Pair<string, string>> domains
Вы не получите O (1) поисков, но я предполагаю, что эта коллекция будет очень маленькой, так что в любом случае это не будет иметь значения.