2016-12-27 51 views
2

我有很多属性Properties.Settings.Default,其名称全部以"store"开头,并且是一个整数,这些数字按顺序排列,我在发起方法后想要做的是增加属性名称中的数字,即从"store1""store2"如果我将其名称作为字符串,如何访问Properties.Settings.Default属性?

我不断收到“标识符预期”错误。我在编程方面相当新,所以任何帮助,将不胜感激。

public void store() 
{ 
    storename1.ForeColor = Color.Orange; 
    if (File.Exists(Filedestination)) 
    { 
     File.Delete(Filedestination); 
    } 
    NumberOfScales = Properties.Settings.Default.("store"+ Convert.ToString(storeNumber) + "NrOfScales"); 
    StartRange = EndRange - Properties.Settings.Default.DegrendelNrOfScales; 
    IPRange = Properties.Settings.Default.DegrendelIPRange; 
    CurrentRange = StartRange; 
    PingScales(); 
} 

我甚至不知道如何以名称("store" + Convert.ToString(storeNumber) + "NrOfScales")来读取一个属性。如果我知道如何做到这一点,那么将代码缩短至少9/10,因为我不必为所有商店中的每个实例重做此操作。有什么办法可以让这个工作?

回答

2

乍一看,你似乎可能选择了错误的地方来存储你的数据。是否有什么特别的原因让你使用Windows Forms的'application settingsSettings)来存储数据?

如果你真的想这样做的,IIRC 您可以通过使用Properties.Settings.Default["PropertyName"](的名称访问的环境,您可以通过产生一个字符串的表达式,如"store" + Convert.ToString(storeNumber) + "NrOfScales"在Visual Studio替代"PropertyName"(或更简洁。2015年以后,$"store{storeNumber}NrOfScales")你会得到一个object,你必须投给你存储在那里值的任何类型,例如:

var numberOfScales = (int)Properties.Settings.Default[$"store{storeNumber:D}NrOfScales"]; 

有关语法的一些提示这里使用:

现在,回到我最初的问题,如果你打开存储数据的其他方式,让我指出了几个备选方案:

  • 如果你只在一个单一的所需要的数据执行你的程序,即数据不需要从程序的一次运行到下一次运行,那么Dictionary<string, int>就足够了。字典允许您将int值与string值相关联,并通过这些string s查找它们。

  • 如果您的数据实际上是用户内容/业务数据,则不要将其存储为“应用程序设置”。至少,使用System.IOFile.Create,File.Open,StreamWriter等)下的工具将数据存储到简单文件(可能为Isolated Storage)。如果要存储结构化数据,则可以使用关系数据库(请参阅SQLite,SQL Server Compact或SQL Server)或文档数据库。

  • 如果您存储的数据实际上是影响应用程序设置/配置的数据,那么您当前对应用程序设置的使用可能没有问题。

+0

非常感谢你,你不知道这对我有多大帮助,我原本虽然保存在系统内存中“比使用数据库更轻,但保存信息在设置证明设置为600+比数据库更令人头疼 – Hein