Обычно я использовал тип KeyValuePair<TKey,TValue> всякий раз, когда у меня есть данные, которые связаны с парой в том смысле, что один из них является ключом к другому. Если данные не связаны, то тип Tuple<T1,T2> имеет больше смысла, и я бы пошел с этим.
Теперь я просто прочитал эту статью о том, почему вообще избегать KeyValuePair<TKey,TValue> и предпочитает Tuple<T1,T2>. Основным аргументом является преимущество производительности Tuple<T1,T2>.
Внешняя производительность, есть ли причина, по которой KVP будет лучшим выбором, чем Tuple<T1,T2>?