C# 如何通过Console.WriteLine()从另一个方法输出整数?

C# 如何通过Console.WriteLine()从另一个方法输出整数?,c#,class,methods,C#,Class,Methods,所以,我有一个方法,我设置一个日期并将其存储在一个名为gameTime的变量中。这很有效。但是现在我创建了另一个方法,我想在控制台中显示该变量,并编写了console.WriteLine(gameTime)但这是不可接受的。它说,在当前的环境下,它不起作用。我需要做什么才能在另一种方法中访问它?这是代码 public class TimeSimulation { public int Second { get; set; } public int Minute { get; se

所以,我有一个方法,我设置一个日期并将其存储在一个名为gameTime的变量中。这很有效。但是现在我创建了另一个方法,我想在控制台中显示该变量,并编写了console.WriteLine(gameTime)但这是不可接受的。它说,在当前的环境下,它不起作用。我需要做什么才能在另一种方法中访问它?这是代码

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

因为变量
gameTime
仅存在于
TimeSettings
方法中

尝试将其置于方法之外,并将其声明为如下字段:

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

编辑: 我的猜测是,某个地方有一个错误的括号,因为您正在从类本身创建另一个
TimeSimulation
实例

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

这是因为您在第一个方法中创建了
gameTime
,因此它只能在这些范围内访问(
{
}
)。 如果要从
ShowTime()
访问它,必须将其置于作用域之外。您可以这样做:

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);
}
请注意,您的方法不能以这种方式是静态的。如果有必要,你可以这样称呼游戏时间:

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

CLASSNAME.gameTime

当您想在其他函数中使用函数时,必须在函数中返回值

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);
}
这现在应该可以工作了,因为“gameTime”现在是一个类级变量,而不是在TimeSettings方法中创建的

希望您确保在TimeSettings方法之后调用ShowTime


仅供参考-这与问题的概念无关,但希望说明TimeSettings方法的命名约定不正确。我更喜欢将其更改为“setTimeings()”或“initializeMings()”

在类中添加一个属性,如:
public DateTime gameTime{get;set;}
或将参数添加到方法
ShowTime
中,如:
public static void ShowTime(DateTime gameTime){……。
gameTime不知道ShowTime方法,因为它被注释掉了。你需要打印在TimeSettings方法中设置的gameTime。因此,创建一个属性或类级别变量,从TimeSettings方法分配值,然后从ShowTime方法调用它。查看我的答案。
gameTime
应该代表什么ent?为什么
TimeSettings()
static?游戏时间应该包含时间和日期,我想显示这一点,用AddDays()操纵它稍后。因此,如果我理解时间模拟的整个概念,我想在将来的UI中显示它,用户可以按play键,时间将以一天的步长移动。如果我获得更多经验,我甚至可能想通过计时器操纵速度,但现在这有点太多了。是的..我看到这一点有点太晚了:(好的,我明白了,我必须学习更多关于方法的知识……那么,我应该删除静态关键字吗?@Dennis,这取决于你的代码的其余部分。如果这些方法在静态类中,你就不能只删除静态关键字。看看教程,了解添加信息的技巧。不,这个类是公共的。但无论如何,我最好还是通过一些more教程,我从你的链接开始。我仍然被这一切弄得不知所措:)想知道为什么它被否决了吗?答案中是否有任何错误。我已将代码更新为静态变量而不是实例类型。对不起,忽略了。我开始怀疑我试图做的事情是否过于复杂,无法实现我想要的目标。我想当Reddit的某个人告诉我应该创建如果我尝试创建一个小型且非常简单的商业游戏,那么我将拥有一个自己的时间模拟类。我是初学者,我基本上只想能够设置一个开始日期,也许以后可以使用AddDays()向前玩这个时间.然后我想我需要另一门课,在这门课上有些事情会继续进行,比如球员们每天得到1美元。这是预期的答案吗?我得到的输出是2000年1月1日凌晨1:01:01