#c#-2.0 #tuples
#c # -2.0 #Кортежи
Вопрос:
Я хочу использовать кортеж, но в C # 2 его не существует. Я думаю заменить его на KeyValuePair .
Это лучший способ сделать это?
Комментарии:
1. Вам нужно, чтобы класс был универсальным, или вы знаете, какие типы будут использоваться?
2. Типы известны, это int для T1 и T2. Итак, альтернативным решением является массив int[,], но я не хочу терять возможности IEnumerable
Ответ №1:
Вероятно, лучшим вариантом является простой класс, содержащий два общих элемента. По сути, это то, что Tuple<T1,T2>
есть.
Если вы знаете типы, которые используете, лучше создать класс с членами этих типов — таким образом, вы можете использовать хорошее именование для класса и членов, чтобы обеспечить хорошую читаемость (которую скрывает такой универсальный тип, как Tuple
).
Исходя из вашего комментария, я бы предположил, что лучшим выбором будет создание небольшого класса-оболочки (или, возможно, структуры) для хранения int
значений.
Непроверенный:
public class Point
{
public Point(int xPos, int yPos)
{
this.xPos = xPos;
this.yPos = yPos;
}
int xPos;
int yPos;
public int XPos { get { return xPos;} set { xPos = value;} }
public int YPos { get { return yPos;} set { yPos = value;} }
}
Комментарии:
1. Итак, использование KeyValuePair<k,v> — плохая идея?
2. @Florian — Это просто скрывает смысл. Если вам нужно использовать его очень ограниченным образом, а смысл не важен, продолжайте использовать KVP.
Ответ №2:
Если вы используете свой Tuple
always like Tuple<T1,T2>
, то вы можете легко переключиться KeyValuePair<T1,T2>
на него без проблем.
Единственное отличие заключается в том, что вы должны использовать свойства Key
and Value
вместо ItemN
свойства the Tuple
.