-1
votes

Pourquoi mon tuple ne retourne-t-il pas de valeur pour programmer la méthode principale correctement?

J'ai une méthode qui devrait renvoyer 2 variables de la méthode de classe à l'essentiel, mais j'utilise clairement mon tuple erroné comme si je vérifie ce que la méthode renvoie, il est incorrect.

using System;

namespace App1
{
     public class Player
    {
        public int Health = 100;
        public int Mana = 100;

static Tuple<int, int> SetAttributes(int pHealth, int pMana)
            {

            pHealth++;
            pMana++;
            Console.WriteLine("Health: " + pHealth + " Mana: " + pMana);

            return new Tuple<int, int>(pHealth, pMana);
            }//method end

static void Main(string[] args)
        {



            Player myPlayer = new Player();
            SetAttributes(myPlayer.Health, myPlayer.Mana);
            Console.WriteLine("In Main ...Health: " + myPlayer.Health + " Mana: " + myPlayer.Mana);

        }

    } //class End 
}//Namespace end


0 commentaires

5 Réponses :


1
votes

setattributes ne prend pas ses arguments par référence et vous ignorez la valeur de retour dans votre méthode principale. Donc, vous écartez immédiatement la valeur incrémentée.


0 commentaires

1
votes

setattributes renvoie le tuple, de sorte que vous ne disposez que les valeurs mises à jour.

        static void Main(string[] args)
        {
            Player myPlayer = new Player();
            Tuple<int, int> newValues = SetAttributes(myPlayer.Health, myPlayer.Mana);
            myPlayer.Health = newValues.Item1;
            myPlayer.Mana = newValues.Item2;
            Console.WriteLine("In Main ...Health: " + myPlayer.Health + " Mana: " + myPlayer.Mana);
        }


1 commentaires

Merci, cela fonctionne bien et je vois ce que je devais faire.



2
votes

Dans votre méthode principale , vous ne lisez pas le tuple à partir de setattributes ()

voici une méthode MAIN / code> MAIN / code> Mise à jour, car Vous devez lire les valeurs de tuple xxx

ICI est MSDN Docs pour TUPLE.


0 commentaires

1
votes

veux juste ajouter, Au lieu d'utiliser l'élément1 et l'élément2 ou d'autres éléments, vous pouvez utiliser des noms spécifiques dans la méthode principale.

(int health, int mana) = SetAttributes(myPlayer.Health, myPlayer.Mana);
// Use health and mana like you normally would.


0 commentaires

0
votes

Cette ligne ne fonctionne pas, car la santé et le mana sont de type de valeur.

Tuple<int, int> ret = SetAttributes(myPlayer.Health, myPlayer.Mana);
myPlayer.Health = ret.Item1;
myPlayer.Mana = ret.Item2;


0 commentaires