如果我将其名称作为字符串,我如何访问Properties.Settings.Default属性?

时间:2016-12-27 12:09:47

标签: c#

我在Properties.Settings.Default中有许多属性,其名称都以"store"开头,是一个整数,这些数字按顺序排列,方法触发后我想做的是增加属性名称中的数字,即从"store1""store2"

我一直收到“标识符预期”错误。我对编程很陌生,所以任何帮助都会受到赞赏。

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,因为我不必为我拥有的所有商店的每个实例重做这个。有什么方法可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:2)

乍一看,您似乎可能选择了错误的位置来存储数据。您使用Windows窗体“application settingsSettings)存储数据有什么特别的原因吗?

如果您真的想这样做,IIRC 您可以使用Properties.Settings.Default["PropertyName"] 按名称访问设置(您可以用任何表达式替换"PropertyName"一个字符串,例如"store" + Convert.ToString(storeNumber) + "NrOfScales"(或者更简洁地在Visual Studio 2015或更高版本中,$"store{storeNumber}NrOfScales")。您将获得一个object,您必须将其转换为任何类型的值存储在那里,例如:

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

有关此处使用的语法的一些提示:

现在,回到我最初的问题,如果您对其他存储数据的方式持开放态度,请允许我指出一些替代方案:

  • 如果您只需要在程序的一次执行期间获取数据,即数据不需要从程序的一次运行持久存储到下一次,那么Dictionary<string, int>可能就足够了。词典允许您将int值与string值相关联,并按这些string查找。

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

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