C# 如何在控制台应用程序中保存所有变量的状态?

C# 如何在控制台应用程序中保存所有变量的状态?,c#,variables,console-application,C#,Variables,Console Application,对于我正在处理的项目,我需要在控制台应用程序中保存所有变量的状态 我知道我可以将单个变量写入一个文件,但我想知道是否有任何方法可以对程序中每个具有值的变量执行此操作 这可能吗?如果可能,我将如何实现它?取决于场景。我将创建一个可序列化的类,该类保存所有要序列化的数据,然后在退出应用程序之前将该类序列化为一个文件 然后,在应用程序启动时反序列化文件(如果存在)。该类需要标记为可序列化 [Serializable] public class AppState { public int Va

对于我正在处理的项目,我需要在控制台应用程序中保存所有变量的状态

我知道我可以将单个变量写入一个文件,但我想知道是否有任何方法可以对程序中每个具有值的变量执行此操作


这可能吗?如果可能,我将如何实现它?

取决于场景。我将创建一个可序列化的类,该类保存所有要序列化的数据,然后在退出应用程序之前将该类序列化为一个文件

然后,在应用程序启动时反序列化文件(如果存在)。该类需要标记为
可序列化

[Serializable]
public class AppState
{
     public int Var1 { get; set; }
     public long Var2 { get; set; }
     public String Var3 { get; set; }
}
然后,将该类的实例序列化为二进制

var state = new AppState();
state.Var1 = 4;
//TODO: populate the state object

var formatter = new BinaryFormatter();

using(var stream = new FileStream("C:\\app.state", FileMode.Create, FileAccess.Write))
{
    formatter.Serialize(stream, state);
    stream.Close();
}
要重新加载状态,请首先确保文件存在

if(File.Exists("C:\\path_to_file")){
    //TODO: do whatever you need to here, such as deserializing the file
}
然后反序列化并初始化所有必需的变量

var formatter = new BinaryFormatter();
AppState state = null;

using(var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
    state = (AppState) formatter.Deserialize(stream);
}

if(state != null){
    //TODO: initialize state
}
请注意,序列化数据的方法有很多种。最受欢迎的是:

  • JSON序列化
  • XML
  • 二进制(如上所述)

对每个变量使用项目设置,然后在需要时使用
Properties.Settings.Default.Save()

从“解决方案资源管理器”>“设置”中右键单击项目

如果需要,创建一个设置文件,然后创建变量


然后使用:
Properties.Settings.Default.VariableName1

由于console是一个单例(基本上是单例
main
方法),所以您还必须有另一个单例—您的环境类型。。嗯<代码>我的环境?如果您喜欢,可以将其设置为单变量,或者在
main
的开头分配一个局部变量,并对其进行适当的变异以存储您想要的任何内容。是否自动保存所有变量?不,那是不可能的。您必须在代码中指定要保存的特定变量,或包含这些变量的对象。保存并使用它们做什么?只需json序列化所有内容,将
[JsonProperty]
添加到主静态类中的每个属性,游戏结束,工作完成,去给自己拿杯咖啡