我正在使用C#创建一个表单应用程序。此应用程序应创建某些文件,并且这些文件需要具有递增编号。因此,我认为我可以将Counter存储在app.config中,并在每次创建文件时将其递增。
我曾经写过这段代码:
System.Configuration.Configuration _Config = null;
public Form1()
{
InitializeComponent();
_Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
private void btnNew_Click(object sender, EventArgs e)
{
int lCount;
if (int.TryParse(ConfigurationManager.AppSettings["count"], out lCount))
{
_Config.AppSettings.Settings["count"].Value = lCount++.ToString();
_Config.Save(ConfigurationSaveMode.Modified);
MessageBox.Show(ConfigurationManager.AppSettings["count"].ToString());
}
else
{
throw new Exception("Count in Config file is no int");
}
}
这不是更新值。我是否需要重新加载配置,还是将计数器值存储在app.config中没有任何意义?
谢谢
答案 0 :(得分:0)
您需要在lCount++;
之前使用toString();
,否则count
总是保存相同的值,您可以在保存新数据时尝试添加ConfigurationManager.RefreshSection方法。
这是您问题的样本。
int i = 0;
Console.WriteLine("i++:" + i++.ToString()); // will get 0
i = 0;
Console.WriteLine("(++i):"+(++i).ToString()); // will get 1
或者您可以使用(++lCount).ToString()
代替lCount++.ToString()
_Config.AppSettings.Settings["count"].Value = (++lCount).ToString();
代码看起来像这样。
System.Configuration.Configuration _Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
int lCount;
if (int.TryParse(ConfigurationManager.AppSettings["count"], out lCount))
{
lCount++;
_Config.AppSettings.Settings["count"].Value = lCount.ToString();
_Config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(_Config.AppSettings.SectionInformation.Name);
}
注意:
我建议您将计数器保存在DB
中而不是App.config
中。