2016-12-09 3 views
0

J'ai 2 sous-routines qui font en sorte qu'elles demandent un nom à deux joueurs différents, mais quand je l'appelle dans le main, il est dit qu'un argument1 doit être passé avec un mot clé 'ref', mais je ne le fais pas déjà?Mon sous-programme n'appelle pas les valeurs dont j'ai besoin

static string GetPlayer1(ref string name1) 
{ 
    Console.WriteLine("PlayerX enter your name:"); 
    name1 = Console.ReadLine(); 
    return name1; 
} 

static string GetPlayer2(ref string name2) 
{ 
    Console.WriteLine("PlayerO enter your name:"); 
    name2 = Console.ReadLine(); 
    return name2; 
} 

static void Main(string[] args) 
{ 
    string name1 = GetPlayer1(name1); 
    string name2 = GetPlayer2(name2); 
... 
+0

Pourquoi pensez-vous que vous avez besoin de passer des paramètres à ces méthodes du tout? –

+0

avez-vous voté à la baisse des deux bonnes réponses qui vous ont été données? –

+0

@SimonPrice: Il n'a pas parce qu'il ne peut pas. – Sefe

Répondre

0

en train de faire, vous n'êtes pas:

string name1 = GetPlayer1(ref name1); 
    string name2 = GetPlayer2(ref name2); 

Ce que vous avez fait est d'ajouter le mot-clé ref à votre définition de la méthode (la création d'un paramètre ref ). Vous devez l'utiliser également dans votre appel de méthode (en créant un réf argument).

Dans votre cas actuel, il n'est pas nécessaire de transmettre les arguments par réf. Vous les définissez avec la valeur de retour de votre méthode GetName.

0

Si vous définissez une méthode avec un ref paramètre, vous devez appeler cette méthode avec le paramètre comme référence:

static void Main(string[] args) 
{ 
    string name1 = GetPlayer1(ref name1); 
    string name2 = GetPlayer2(ref name2); 
} 

Et pour être complet, que les autres réponses que vous disent déjà: Je ne vois pas la nécessité d'une référence appelant ici, vous pouvez accomplir vos objectifs sans cela.

4

Ici, le ref dans les paramètres de méthode est inutile, en fait n'avez même pas besoin de paramètres du tout. Changer à ceci:

static string GetPlayer1() 
{ 
    Console.WriteLine("PlayerX enter your name:"); 
    return Console.ReadLine(); 
} 

static string GetPlayer2() 
{ 
    Console.WriteLine("PlayerO enter your name:"); 
    return Console.ReadLine(); 
} 

static void Main(string[] args) 
{ 
    string name1 = GetPlayer1(); 
    string name2 = GetPlayer2(); 
} 


Cependant si elle était votre intention d'utiliser ref (comme un exemple ou un exercice), alors ce serait la façon de le faire. Les méthodes n'ont maintenant pas de type de retour (void au lieu de string) car les textes sont retournés par l'affectation aux paramètres ref.

static void GetPlayer1(ref string name1) 
{ 
    Console.WriteLine("PlayerX enter your name:"); 
    name1 = Console.ReadLine(); 
} 

static void GetPlayer2(ref string name2) 
{ 
    Console.WriteLine("PlayerO enter your name:"); 
    name2 = Console.ReadLine(); 
} 

static void Main(string[] args) 
{ 
    string name1; 
    string name2; 
    GetPlayer1(ref name1); // "ref" must now be specified, simply because 
    GetPlayer2(ref name2); // both methods also specify it. 
} 


Pour en savoir plus sur les ref (par exemple, quand ou comment l'utiliser), voir ces questions:
- Example of practical of "ref" use
- Why use the 'ref' keyword when passing an object?