Как поменять общую структуру в c #? - PullRequest
1 голос
/ 30 января 2012

У меня есть такая структура ниже.Теперь я хочу поменять 2 структуры.

public struct Pair<T, U>
{
    public readonly T Fst;
    public readonly U Snd;

    public Pair(T fst, U snd)
    {
        Fst = fst;
        Snd = snd;
    }

    public override string ToString()
    {
        return "(" + Fst + ", " + Snd + ")";
    }

    **public Pair<U, T> Swap(out Pair<U, T> p1, Pair<T,U> p2)
    {
        p1 = new Pair<U, T>(p2.Snd, p2.Fst);

        return p1; 
    }**
}

В методе Main попробуйте следующее:

        Pair<int, String> t1 = new Pair<int, string>();
        Pair<String, int> t2 = new Pair<string,int>("Anders",13);
        **t1.Swap(out t1,);** //compilator tells -> http://i.stack.imgur.com/dM6P0.png

Параметры метода Swap отличаются от значения компилятора.

Ответы [ 2 ]

5 голосов
/ 31 января 2012

Здесь нет необходимости для наших параметров. Просто определите это как:

public Pair<U, T> Swap()
{
    return new Pair<U, T>(this.Snd, this.Fst);
}

Вы можете сделать:

Pair<string, int> t2 = new Pair<string,int>("Anders",13);
Pair<int, string> t1 = t2.Swap();
0 голосов
/ 31 января 2012

Ваш 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;
}

однако, потому что на самом деле нет нужды передавать что-либо по ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...