我目前正在使用.Settings文件来存储WinForms应用程序中的级别数据(Level1.settings,Level2.settings)。请不要错过为什么我会这样做:)我目前正在阅读每个级别的函数,因为我无法弄清楚如何传递给函数。
在我的申请中,我有:
AppTitle
Properties
Level1.settings
Level2.settings
我目前正在使用单独的功能阅读它们,例如:
void readLevel1()
{
levelMessage = Properties.Level1.Default.WelcomeMessage;
}
在这个例子中,我怎么能通过" Level1"作为函数的参数?
我更喜欢这样的东西:
void readLevel(String identifier)
{
levelMessage = ConfigurationManager.AppSettings[identifier].Default.WelcomeMessage;
}
但是我在"默认"说,'字符串不包含'默认'的定义而不是扩展方法'默认'接受String的第一个参数可以找到'。任何帮助将不胜感激!
新信息: 好吧,我整天都在墙上敲我的头,这就是我想出来的,这似乎有用:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection cs = config.SectionGroups["applicationSettings"].Sections["AppTitle.Properties.Level1"];
ClientSettingsSection css = (ClientSettingsSection)cs;
String s = css.Settings.Get("WelcomeMessage").Value.ValueXml.InnerText;
如果有人知道更好的方式,请告诉我!使用InnerText感觉就像一个黑客。
感谢Ann试图提供帮助!
答案 0 :(得分:1)
我将假设Level1
和Level2
具有所有相同属性并具有相同的定义。
在这种情况下,您可以创建Level1
和Level2
都可以实现的界面。然后,您可以像这样定义设置读取方法:
void ReadLevel(ILevelSettings settingsInstance)
{
levelMessage = settingsInstance.WelcomeMessage;
}
你会这样称呼:
ReadLevel(Properties.Level1.Default);
如果为Level1
和Level2
生成的类是部分类(并且我不记得它们),那么这应该很容易实现。
ETA:部分课程演示:
类定义上的partial
关键字意味着类的定义不一定都在一个源代码文件中。你可以拥有其他人。
因此,您可以创建自己的源代码文件,称之为" Level1.partial.cs",并使用此代码:
namespace AppTitle.Properties
{
internal sealed partial class Level1 : ILevelSettings
{
// any additional functions or properties that you would like
// your Level1 class to have.
}
}
(免责声明:那是来自记忆。我省略了using
陈述。)
在编译时,编译器将收集具有相同命名空间和修改关键字(内部,密封)的类Level1
的所有定义,并将它们构建到单个类中,混合生成的方法和属性,你添加的任何一个。
由此可以使生成的Level1
和Level2
类继承自接口(甚至是基类),即使生成了大多数类定义。您可以随时重新生成它,而不会影响您添加的代码,因为它位于不同的文件中。