C# 如何在程序退出时保存变量值?

C# 如何在程序退出时保存变量值?,c#,visual-studio-2010,arraylist,C#,Visual Studio 2010,Arraylist,我正在尝试使用ArrayList来存储可变数量的字符串,并且想知道如何保存ArrayList及其元素,以便我的windows窗体可以在程序加载和退出之间调用它们的值 我曾经将信息存储在文本文件中,但如果可能的话,我希望避免使用外部文件 感谢您提供的任何帮助。您可以使用“最佳部分”保存ArrayList(如果不是ArrayList,则它们是其他等效类),因为它允许您在应用程序和用户级别设置变量 在这里可以找到一个很好的例子,如何使用Settigns。请看一看。我一直在使用表单(在Winforms中

我正在尝试使用ArrayList来存储可变数量的字符串,并且想知道如何保存ArrayList及其元素,以便我的windows窗体可以在程序加载和退出之间调用它们的值

我曾经将信息存储在文本文件中,但如果可能的话,我希望避免使用外部文件


感谢您提供的任何帮助。

您可以使用“最佳部分”保存ArrayList(如果不是ArrayList,则它们是其他等效类),因为它允许您在应用程序和用户级别设置变量

在这里可以找到一个很好的例子,如何使用Settigns。请看一看。

我一直在使用表单(在Winforms中,从它的声音来看)来存储您事先创建的Properties.Settings变量。如果是ArrayList,则可以将其存储到XML或逗号分隔的列表中。您的序列化/反序列化方法将取决于您的数据

我曾经将信息存储在文本文件中,但如果可能的话,我希望避免使用外部文件

在运行之间存储数据不可避免地需要程序可执行文件之外的内容

注册中心可以工作,但是注册中心除了存储少量信息外,对于存储任何东西都不是很好。添加文件的用户可以使用数据库

对于文本字符串,可以在单个语句中保存和加载文本文件(每行1个字符串)。将文件放入独立存储区或%AppData%中的专用文件夹中可限制用户将其弄乱的机会。2

这里使用
ToArray()
作为
ArrayList
并不能实现
IEnumerable
List
对于集合来说是一个更好的选择,并避免这种情况)


1这假定字符串中的行尾无效。如果需要支持,有许多选项。通过另一种机制分离字符串的一些文件格式,或者可能最简单的方法是通过简单的转换转义字符(例如
\
→ <代码>\\,换行符→ <代码>\n和回车→ <代码>\r)


2如果没有显著的额外复杂性,您就无法防止这种情况的发生,这将使用服务之类的东西作为不同的用户加载/保存,从而允许数据受ACL保护。

嵌入式数据库如何?(然而,我发现仅使用1个阵列就太过分了)您必须将信息存储在应用程序外部的某个位置,那么您首选的存储位置在哪里?文件、注册表或数据库是可能的选项-如果您想要一个有用的答案,您必须指定哪个选项。假设文件是最好的方法,因为您可能会在访问注册表时遇到问题,DB将被过度使用,因为它与您的问题没有直接关系,但请使用通用集合(例如
列表
),不是
ArrayList
。我认为Windows注册表也是一个好主意。看看这里:另一篇很好的文章发表在那里:@user1197993欢迎您,如果您是stuck,我们将很乐意为您提供帮助。这将为用户创建一个外部文件。根据代码签名的详细信息,每个版本的应用程序可能会有所不同:保存的数据在升级时会丢失。@Richard在“属性”窗口中,设置的BuildAction可以转到Embedded ResourceHatSoft,我把变量str作为字符串类型放在设置中,然后我尝试说string str1=Properties.settings.str,但它说它是一个“字段”,但它被用作“类型”。有什么问题吗?@user1197993您需要以这种方式使用它Properties.Settings.Default.str1
// Load
var theStrings = new ArrayList();
var path = GetSavePath();
if (File.Exists(path)) {
  theStrings.AddRange(File.ReadLines(path);
}

// Save:
File.WriteAllLines(GetSavePath(), theStrings.ToArray());