2012-06-12 173 views
6

我有一些属性存储在我的AppConfig中,现在我想动态地访问它们(例如在循环或函数中)。从设置中获取动态属性

使用MySettings.NAME_OF_THAT_THING访问值是没有问题的,但如果名称是可变的呢?

我想:

String propertyValue = MySettings.GetType().GetProperty("NAME_OF_THAT_THING").ToString(); 

但我回来的唯一的事情就是属性的名称。我怎样才能做到这一点?

+0

什么是MySettings的类型?它没有实现iDictionary或什么?我希望你能够做'MySettings(“NAME_OF_THING”)... ... – Chris

+0

Application.Properties.Settings – user1450661

回答

5
String propertyValue = MySettings.GetType() 
.GetProperty("NAME_OF_THAT_THING") 
.GetValue(MySettings, null); //replace MySettings with null in GetValue(...) if MySettings is a static class 
+0

耶,解决了它!非常感谢你。 =) – user1450661

0

您是否尝试过使用ConfigurationManager.AppSettings property?您应该能够通过下面的代码,让您的设置:

String propertyValue = ConfigurationManager.AppSettings["NAME_OF_THAT_THING"]; 

的MSDN文章ConfigurationManager.AppSettings还包括用于通过指数通过的所有条目的AppSettings的循环,而不是名称的例子。

+0

OP所指的设置未存储在配置文件的appSettings元素中,它们使用applicationSettings元素下的更复杂的结构进行存储。 –

8

所有你需要做的是:

String propertyValue = Settings.Default["NAME_OF_THAT_THING"].ToString(); 

在使用反射显然会工作,这是矫枉过正。

+0

我没有“MySettings.Default”:(没有方法在这方面默认) – user1450661

+0

有趣。它是一个WinForm应用程序吗?如果它是WinForm应用程序,它可能只会添加该属性... –

+0

@ user1450661立即尝试。我混淆了设置和MySettings。 –

0

答案的原单海报的问题是这样的: MySettings [NAME_OF_THAT_THINGmysettings]确实像原来职位的工作

然而

为这些人寻找答案,在他们的Windows应用程序中使用内置的设置: myAppDefaultNameSpace.Properties .Settings.Default [NAME_OF_THAT_THINGmysettings] 是要走的路线