dynamically populate properties of a class
我有以下代码,它从app.config中获取一些值,并尝试使用这些值填充类的属性。
1 2 3 4 5 6 7 8 9 10 11 12 | foreach (string ReferenceKey in Utilities.CSVToList(ConfigurationManager.AppSettings[source +":Keys"])) { if (ConfigurationManager.AppSettings[ReferenceKey] != null && Incoming_Values.ContainsKey(ConfigurationManager.AppSettings[ReferenceKey])) { PropertyInfo info = MyCustomClass.GetType().GetProperty(ReferenceKey.Split(':')[1]); info.SetValue(MyCustomClass, Incoming_Values[ConfigurationManager.AppSettings[ReferenceKey]]); } else { return null; } } |
我遇到的问题是,显然从配置文件中获得的kvp都是string类型,但类的属性是强类型的。我试图"松散地耦合"值和类,但我遇到了一个问题,即属性不是字符串(例如,它是一个datetime或int,甚至是我自己的类)。
有人知道我会怎么处理这样的事情吗?我应该建一个转换类还是什么?
看看自定义配置部分,它们为您提供了对app.config值的强类型访问。然后你可以随意把这个放在你的课上。
如何:使用配置节(msdn)创建自定义配置节
如何在app.config中创建自定义配置节(堆栈溢出)
框架中现有的实用程序可以帮助您实现这一点。
一个简单的函数是
还有一种更易于插拔的方法:您可以使用
1 | TypeDescriptor.GetConverter(targetType).ConvertFromInvariantString(configValue) |
如果需要,可以定义自定义