如何将Properties或.Settings传递给函数?

时间:2015-02-14 19:58:43

标签: c# .net syntax

我目前正在使用.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试图提供帮助!

1 个答案:

答案 0 :(得分:1)

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

在这种情况下,您可以创建Level1Level2都可以实现的界面。然后,您可以像这样定义设置读取方法:

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

你会这样称呼:

ReadLevel(Properties.Level1.Default);

如果为Level1Level2生成的类是部分类(并且我不记得它们),那么这应该很容易实现。

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

由此可以使生成的Level1Level2类继承自接口(甚至是基类),即使生成了大多数类定义。您可以随时重新生成它,而不会影响您添加的代码,因为它位于不同的文件中。