Кстати, ваш код условной компиляции разочарует программистов, которые его встречают.
Отредактировано на основе комментариев
Вероятно, лучше написать свой собственный класс, чтобы вы могли гарантировать, что он собирается делать, и у вас нет никаких странных проблем с подписью или наследованием:
public class Pair<TSource, TResult>
{
public TSource Source { get; set; }
public TResult Result { get; set; }
public Pair() {}
public Pair(TSource source, TResult result)
{
Source = source;
Result = result;
}
// Perhaps override Equals() and GetHashCode() as well
}
Как всегда, хорошо взвешивать, используя встроенные вещи, а не разворачивать свой собственный код. Обычно это означает, что вы спрашиваете себя: «Я в порядке, поддерживаю и поддерживаю этот код?» vs. "Код делает то, что мне нужно, из коробки?"
В этом случае, поскольку вы не гарантированно получите Tuple<T1, T2>
, я бы просто написал свой собственный простой, чтобы другие разработчики могли дышать спокойно:)