Каков наилучший способ заменить кортеж на C # 2

#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 .