Каков наилучший способ использования пары (тройной и т. Д.) Значений в качестве одного значения в C #? - PullRequest
20 голосов
/ 19 сентября 2008

То есть я хотел бы иметь кортеж значений.

Случай использования на мой взгляд:

Dictionary<Pair<string, int>, object>

или

Dictionary<Triple<string, int, int>, object>

Существуют ли встроенные типы, такие как Pair или Triple? Или как лучше это реализовать?

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

Обновление 2 Полагаю, стоит напомнить, что когда вы используете какое-либо значение в качестве ключа в словаре, оно должно быть неизменным.

Ответы [ 16 ]

0 голосов
/ 19 сентября 2008

Есть также типы Tuple <> в F #; вам просто нужно сослаться на FSharp.Core.dll.

0 голосов
/ 19 сентября 2008

Вы можете использовать System.Collections.Generic.KeyValuePair в качестве реализации вашей пары.

Или вы можете просто реализовать свои собственные, они не сложны:

public class Triple<T, U, V>
{
  public T First {get;set;}
  public U Second {get;set;}
  public V Third {get;set;}
}

Конечно, вы можете однажды столкнуться с проблемой, что Triple (string, int, int) не совместима с Triple (int, int, string). Возможно, вместо этого используйте System.Xml.Linq.XElement.

0 голосов
/ 19 сентября 2008

Для этого нет встроенных классов. Вы можете использовать KeyValuePair или развернуть собственную реализацию.

0 голосов
/ 19 сентября 2008

Для первого случая я обычно использую

Dictionary<KeyValuePair<string, int>, object>
0 голосов
/ 19 сентября 2008

Да, есть System.Web.UI.Pair и System.Web.UI.Triplet (у которого есть перегруженный создатель для парного поведения!)

0 голосов
/ 19 сентября 2008

Нет встроенных модулей, но создать класс Pair тривиально.

...