Каков наилучший способ хранения пар строк, создания объекта или использования класса в .NET? - PullRequest
23 голосов
/ 17 августа 2011

Не знаю, есть ли у меня "тяжелый день" - но я просто подумал, что здесь лучший маршрут.

Контекст:

У меня есть список полей иЯ хочу хранить псевдонимы с ними (я использую .NET 2.0 BTW), например,

enter image description here

Таким образом, это по сути пара строк:

ССЫЛКА, Ссылка

СООБЩЕСТВО, Сообщество

POST_CODE, Почтовый индекс

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

Любая помощь / указатели были бы хорошими.

Ответы [ 7 ]

40 голосов
/ 17 августа 2011

Универсальный класс "pair" для .NET равен Tuple.Вы можете использовать его следующим образом:

var strings=new List<Tuple<string, string>>();
strings.Add(Tuple.Create("REFERENCE", "Ref"));

Словарь является вполне приемлемой заменой, если крайняя левая строка является уникальной (т. Е. Ключом).В противном случае вы получите ошибки.

Вопрос о том, лучше ли использовать встроенные коллекции или создать реальный объект, зависит от ваших потребностей (будете ли вы добавлять дополнительные столбцы позже?что с использованием словарного подхода), как часто вы используете его (если это базовый тип, вы, вероятно, должны сделать для него модель домена) и т. д.

Редактировать: Что касается неиспользованиявстроенная функциональность словаря, это не так: вы используете его алгоритм двоичного поиска и конструкцию внутреннего дерева для молниеносного поиска.Список из Tuple или вашего собственного типа, скорее всего, не будет иметь этого, и он вернется к линейному поиску.

14 голосов
/ 17 августа 2011

Как насчет System.Tuple ?

9 голосов
/ 17 августа 2011

Вы можете использовать универсальный Dictionary<string, string>, если ваши «Имена полей» уникальны.

В противном случае вы можете использовать класс Lookup , если не возражаете против дублирования ключей.

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

5 голосов
/ 17 августа 2011

а как же Tuple<string,string>? Он встроен в .net 4.0 и легкий.

4 голосов
/ 17 мая 2016

На мой взгляд, лучше использовать собственную структуру для хранения двух строк, потому что: System.Collections.Generic.Dictionary и System.Collections.Specialized.NameValueCollection требуют, чтобы метод Add добавил строки в них - это дополнительные строки кода. Класс System.Tuple имеет только свойства ReadOnly - это может быть препятствием.

Пример простой структуры:

public struct DoppelWert
{
 public string Wert1; 
 public string Wert2;
}
2 голосов
/ 19 ноября 2015

Для пар строк альтернативно используйте NameValueCollection

1 голос
/ 04 августа 2016

Удивлен, никто не упомянул KeyValuePair? https://msdn.microsoft.com/en-us/library/5tbh8a42(v=vs.110).aspx

Обратите внимание, что если вы беспокоитесь о производительности, взгляните на это сравнение http://www.dotnetperls.com/keyvaluepair

...