Встроенные классы
В некоторых конкретных случаях .net Framework уже предоставляет классы, подобные кортежу, которые вы можете использовать.
Пары и тройки
универсальный
System.Collections.Generic.KeyValuePair
класс может быть использован как реализация пары adhoc. Это класс, который
Общий словарь использует внутренне.
Кроме того, вы можете обойтись
System.Collections.DictionaryEntry
структура, которая действует как элементарная пара и имеет преимущество
быть доступным в Mscorlib. С другой стороны, это то, что эта структура не
строго типизированный.
Пары и тройки также доступны в виде
System.Web.UI.Pair и
System.Web.UI.Triplet классы. Несмотря на то, что эти классы находятся в сборке System.Web
они могли бы быть идеально подходящими для разработки формы win. Тем не менее, эти классы
также не является строго типизированным и может не подходить для некоторых сценариев, таких как универсальная структура или библиотека.
Кортежи высшего порядка
Для кортежей более высокого порядка, если не считать собственного класса, может
не будет простым решением.
Если вы установили
F # язык , вы можете сослаться на FSharp.Core.dll , который содержит набор универсальных неизменяемых
Microsoft.Fsharp.Core.Tuple классы
до общего числа. Тем не менее, даже при неизменном FSharp.Code.dll
может быть распространен, F # является исследовательским языком и незавершенным
Это решение может быть интересным только в академических кругах.
Если вы не хотите создавать свой собственный класс и вам неудобно
ссылаясь на библиотеку F #, один изящный трюк может заключаться в расширении универсального класса KeyValuePair, чтобы член Value сам был вложенным KeyValuePair.
Например, следующий код иллюстрирует, как вы можете использовать
KeyValuePair для создания троек:
int id = 33;
string description = "This is a custom solution";
DateTime created = DateTime.Now;
KeyValuePair<int, KeyValuePair<string, DateTime>> triple =
new KeyValuePair<int, KeyValuePair<string, DateTime>>();
triple.Key = id;
triple.Value.Key = description;
triple.Value.Value = created;
Это позволяет расширить класс до любого произвольного уровня, как требуется.
KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string> quadruple =
new KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string>();
KeyValuePair<KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string>, string> quintuple =
new KeyValuePair<KeyValuePair<KeyValuePair<KeyValuePair<string, string>, string>, string>, string>();
Roll Your Own
В других случаях вам, возможно, придется прибегнуть к
класс кортежа, и это не сложно.
Вы можете создавать простые структуры, например:
struct Pair<T, R>
{
private T first_;
private R second_;
public T First
{
get { return first_; }
set { first_ = value; }
}
public R Second
{
get { return second_; }
set { second_ = value; }
}
}
Каркасы и библиотеки
Эта проблема уже решалась ранее и фреймворки общего назначения.
существуют Ниже приведена ссылка на один из таких фреймворков: