我在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,因为我不必为我拥有的所有商店的每个实例重做这个。有什么方法可以让它发挥作用吗?
答案 0 :(得分:2)
乍一看,您似乎可能选择了错误的位置来存储数据。您使用Windows窗体“application settings(Settings
)存储数据有什么特别的原因吗?
如果您真的想这样做,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"];
有关此处使用的语法的一些提示:
[]
语法称为"indexer"。$"…"
适用于string interpolation。与使用+
相比,它通常允许更整齐的字符串连接。$"…{…:D}…"
中使用的D
(decimal) format specifier可确保将storeNumber
格式化为十进制,而无需任何千位/小数分隔符。现在,回到我最初的问题,如果您对其他存储数据的方式持开放态度,请允许我指出一些替代方案:
如果您只需要在程序的一次执行期间获取数据,即数据不需要从程序的一次运行持久存储到下一次,那么Dictionary<string, int>
可能就足够了。词典允许您将int
值与string
值相关联,并按这些string
查找。
如果您的数据实际上是用户内容/业务数据,则不要将其存储为“应用程序设置”。至少,使用System.IO
下的工具(File.Create
,File.Open
,StreamWriter
等将数据存储到一个简单文件(可能是Isolated Storage)。 )。如果要存储结构化数据,可以使用关系数据库(例如,参见SQLite,SQL Server Compact或SQL Server)或文档数据库。
如果您存储的数据实际上是影响应用程序设置/配置的数据,那么您当前使用的应用程序设置可能没问题。