我当前正在使用.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的帮助!

最佳答案

我将假定Level1Level2具有所有具有相同定义的相同属性。

在这种情况下,您可以创建同时实现Level1Level2的接口。然后,您可以定义您的设置读取方法,如下所示:

void ReadLevel(ILevelSettings settingsInstance)
{
   levelMessage = settingsInstance.WelcomeMessage;
}


您可以这样称呼它:

ReadLevel(Properties.Level1.Default);


如果为Level1Level2生成的类是局部类(并且我不记得是不是),则这应该易于实现。

预计到达时间:部分班级示范:

类定义中的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的所有定义,并将它们构建为单个类,将生成的方法和属性以及您添加的任何方法和属性混合在一起。

因此,即使大多数类定义都已生成,也可以使生成的Level1Level2类从接口(甚至是基类)继承。您可以随时重新生成它,而不会影响添加的代码,因为它在另一个文件中。

关于c# - 如何将Properties或.Settings传递给函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28519689/

10-11 08:07