2010-02-25 7 views
1

C'est la première fois que j'ai besoin d'utiliser des génériques et des références et j'ai du mal à le faire. Je sais que c'est quelque chose d'évident.Débutant Q sur l'utilisation de la référence et des génériques

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(); 
    } 
} 

Sur debug "SWAP (a, b)" donne l'erreur: La meilleure méthode surchargée pour 'Program.SWAP (ref double, ref Double)' a quelques arguments non valides.

Merci beaucoup pour mettre en place avec ces types de questions, Victor

+0

Ajouté balise de langue – Joel

Répondre

2

Oui .. vous devez transmettre les valeurs avec la balise ref

édité jusqu'à compilé

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(); 
    } 
    } 
+1

+1. Bien que "" ne soit pas nécessaire. –

+0

SWAP renvoie void, il ne devrait donc pas y avoir d'assignation. – Joel

+0

Merci JDMAX, se rappellera que, j'ai aussi fait l'erreur d'assigner à la valeur c, qui est une erreur puisque SWAP est vide. – Victor

4

Lorsque vous appelez une fonction qui utilise une valeur ref, vous devez indiquer au compilateur de prendre un ref. De plus, votre SWAP ne renvoie pas de valeur.

Ainsi, la ligne d'échange devrait être

SWAP(ref a, ref b); 
Questions connexes