我当前正在使用.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;
}
但是我在“默认”上遇到语法错误,“字符串不包含“默认”的定义,找不到扩展方法“默认”,接受字符串的第一个参数)。任何帮助将不胜感激!
新资讯:
好吧,我整天都在敲墙,这是我想到的,似乎可以正常工作:
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的帮助!
最佳答案
我将假定Level1
和Level2
具有所有具有相同定义的相同属性。
在这种情况下,您可以创建同时实现Level1
和Level2
的接口。然后,您可以定义您的设置读取方法,如下所示:
void ReadLevel(ILevelSettings settingsInstance)
{
levelMessage = settingsInstance.WelcomeMessage;
}
您可以这样称呼它:
ReadLevel(Properties.Level1.Default);
如果为
Level1
和Level2
生成的类是局部类(并且我不记得是不是),则这应该易于实现。预计到达时间:部分班级示范:
类定义中的
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
类从接口(甚至是基类)继承。您可以随时重新生成它,而不会影响添加的代码,因为它在另一个文件中。关于c# - 如何将Properties或.Settings传递给函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28519689/