Donc, j'ai une méthode où je fixe une date et la stocke dans une variable appelée gameTime. Ça marche. Mais maintenant, j'ai créé une autre méthode où je veux afficher cette variable dans la console et j'ai écrit Console.WriteLine (gameTime); mais ce n'est pas accepté. Ça dit, ça n'existe pas dans le contexte actuel. Que dois-je faire pour rendre cela accessible dans l'autre méthode? Voici le code ...

public class TimeSimulation
{
    public int Second { get; set; }
    public int Minute { get; set; }
    public int Hour { get; set; }
    public int Day { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }



    public static void TimeSettings()
    {
        TimeSimulation startTime = new TimeSimulation();
        startTime.Second = 1;
        startTime.Minute = 1;
        startTime.Hour = 1;
        startTime.Day = 1;
        startTime.Month = 1;
        startTime.Year = 2000;

        DateTime gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
    }

    public static void ShowTime()
    {
        //DateTime gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
        Console.WriteLine(gameTime);
    }
-1
Dennis 24 janv. 2017 à 17:23

4 réponses

Meilleure réponse
public class TimeSimulation
{
    public int Second { get; set; }
    public int Minute { get; set; }
    public int Hour { get; set; }
    public int Day { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }

    private static DateTime gameTime; 



    public static void TimeSettings()
    {
        TimeSimulation startTime = new TimeSimulation();
        startTime.Second = 1;
        startTime.Minute = 1;
        startTime.Hour = 1;
        startTime.Day = 1;
        startTime.Month = 1;
        startTime.Year = 2000;

        gameTime = new DateTime(startTime.Year, startTime.Month,   startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
    }

    public static void ShowTime()
    {
        //DateTime gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
        Console.WriteLine(gameTime);
    }
}

Cela devrait fonctionner maintenant car "gameTime" est maintenant une variable de niveau de classe plutôt que créée dans la méthode TimeSettings.

J'espère que vous vous assurez que vous appellerez ShowTime après la méthode TimeSettings.

FYI - Ceci n'est pas lié au concept de la question, mais je voudrais dire que la convention de dénomination pour la méthode TimeSettings n'est pas correcte. Je préfère le changer en "SetTimings ()" ou "InitializeTimings ()".

0
G K 24 janv. 2017 à 14:48

C'est parce que vous avez créé gameTime dans votre première méthode, donc il n'est accessible que dans ces portées (les { et }). Si vous souhaitez y accéder depuis ShowTime(), vous devez le mettre en dehors des portées. Vous pouvez le faire comme ceci:

public static DateTime gameTime { get; set; }
public void TimeSettings()
{
    TimeSimulation startTime = new TimeSimulation();
    startTime.Second = 1;
    startTime.Minute = 1;
    startTime.Hour = 1;
    startTime.Day = 1;
    startTime.Month = 1;
    startTime.Year = 2000;

    gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
}

public void ShowTime()
{
    //DateTime gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
    Console.WriteLine(gameTime);
}

Notez que vos méthodes ne peuvent pas être statiques de cette façon. S'ils le doivent, vous pouvez appeler gameTime comme ceci:

CLASSNAME.gameTime

0
Jeremy V. 24 janv. 2017 à 14:28

Vous devez renvoyer une valeur dans votre fonction lorsque vous souhaitez l'utiliser dans une autre

public static DateTime TimeSettings()
{
    TimeSimulation startTime = new TimeSimulation();
    startTime.Second = 1;
    startTime.Minute = 1;
    startTime.Hour = 1;
    startTime.Day = 1;
    startTime.Month = 1;
    startTime.Year = 2000;

    return gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
}

public static void ShowTime()
{
    DateTime gameTime = TimeSettings()
    Console.WriteLine(gameTime);
}
0
Dawid Wekwejt 24 janv. 2017 à 14:28

Parce que votre variable gameTime n'existe que dans la méthode TimeSettings.

Essayez de le sortir de la méthode et déclarez-le comme un champ comme celui-ci:

DateTime gameTime;

public static void TimeSettings()
{
    TimeSimulation startTime = new TimeSimulation();
    startTime.Second = 1;
    startTime.Minute = 1;
    startTime.Hour = 1;
    startTime.Day = 1;
    startTime.Month = 1;
    startTime.Year = 2000;

    DateTime gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
}

public static void ShowTime()
{
    //DateTime gameTime = new DateTime(startTime.Year, startTime.Month, 
    if(gameTime != null)
    {
        startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
        Console.WriteLine(gameTime);
    }
}

ÉDITER: Je suppose qu'il y a un crochet mal placé quelque part parce que vous créez une autre instance de votre classe TimeSimulation à partir d'elle-même.

public class TimeSimulation
{
    public int Second { get; set; }
    public int Minute { get; set; }
    public int Hour { get; set; }
    public int Day { get; set; }
    public int Month { get; set; }
    public int Year { get; set; }
} // I think this bracket was missing..

static DateTime gameTime;

public static void TimeSettings()
{
    TimeSimulation startTime = new TimeSimulation();
    startTime.Second = 1;
    startTime.Minute = 1;
    startTime.Hour = 1;
    startTime.Day = 1;
    startTime.Month = 1;
    startTime.Year = 2000;

    gameTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
}

public static void ShowTime()
{
    //DateTime gameTime = new DateTime(startTime.Year, startTime.Month, 
    if(gameTime != null)
    {
        startTime.Day, startTime.Hour, startTime.Minute, startTime.Second);
        Console.WriteLine(gameTime);
    }
}
0
Rik 24 janv. 2017 à 14:37