Ваш Swap
метод немного сбивает с толку. Не имеет смысла передавать параметр по ссылке (out
), а затем возвращать тот же параметр. Кстати, параметры, ожидаемые компилятором, точно верны. У вас есть Pair<int,String>
(t1), поэтому T == int и U == String, а второй аргумент определен как Pair<T,U>
, поэтому T должно быть int
, а U должно быть String
.
Менее запутанная реализация Swap
будет выглядеть так:
public static void Swap(out Pair<U, T> p1, Pair<T,U> p2)
{
p1 = new Pair<U, T>(p2.Snd, p2.Fst);
}
или как это:
public void Swap(out Pair<U,T> pSwapped)
{
pSwapped = new Pair<U,T>(Snd,Fst);
}
Я бы предпочел это:
public Pair<U,T> Swap()
{
Pair<U,T> rV = new Pair<U,T>(Snd,Fst);
return rV;
}
однако, потому что на самом деле нет нужды передавать что-либо по ссылке.