Новичок Q по использованию ссылок и дженериков - PullRequest
1 голос
/ 26 февраля 2010

это первый раз, когда мне нужно использовать дженерики и ссылки, и я испытываю трудности с этим. Я знаю, это что-то очевидное.

public class Program
{
    void SWAP<T>(ref T a, ref T b) { T dum = a; a = b; b = dum; }

    static void Main(string[] args)
    {
        double a = 1; double b = 2;
        double c = SWAP(a, b);

        Console.Write(a.ToString());        

        Console.Read();
    }
}

При отладке «SWAP (a, b)» выдает ошибку: лучший перегруженный метод для «Program.SWAP (ref double, ref double)» имеет недопустимые аргументы.

Большое спасибо за то, что согласились с такими вопросами, Victor

Ответы [ 2 ]

4 голосов
/ 26 февраля 2010

При вызове функции, которая использует значение ref, вы должны указать компилятору принять ref. Также ваш SWAP не возвращает значение.

Таким образом, линия свопа должна быть

SWAP(ref a, ref b);
2 голосов
/ 26 февраля 2010

Да .. вам нужно передать значения с тегом ref

редактируется до компиляции

public class Program {
    static void SWAP<T>( ref T a, ref T b ) {
      T dum = a;
      a = b;
      b = dum;
    }

    static void Main( string[] args ) {
      double a = 1; double b = 2;
      SWAP<double>( ref a,ref  b );

      Console.Write( a.ToString() );

      Console.Read();
    }
  }
...