C# 动态填充类的属性

C# 动态填充类的属性,c#,reflection,loose-coupling,C#,Reflection,Loose Coupling,我有以下代码,它从我的App.config中获取一些值,并尝试使用它们填充类的属性 foreach (string ReferenceKey in Utilities.CSVToList(ConfigurationManager.AppSettings[source + ":Keys"])) { if (ConfigurationManager.AppSettings[ReferenceKey] != null && Incoming_Values.ContainsKey

我有以下代码,它从我的App.config中获取一些值,并尝试使用它们填充类的属性

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,甚至是我自己的类)


有人知道我会怎么处理这样的事情吗?我应该建立一个Translator类还是什么

框架中现有的实用程序可以帮助您实现这一点

一个简单的函数是方法,但它不是非常可定制的,仅限于可以管理的类型之间的转换。如果足够的话,就去吧

这里有另一种更易插拔的方法:可以使用s。您可以从类中获得
TypeConverter


如果需要,您可以定义自定义的
TypeConverter
类。这可能比从头开始实施您自己的解决方案要好,也可能不好。这取决于您的需要。

查看自定义配置部分,它们为您提供对app.config值的强类型访问。然后,您可以根据自己的意愿将其松散地耦合到您的类中


你看过
Convert.ChangeType
了吗?我编辑过你的标题。请看,“,其中的共识是“不,他们不应该”。我认为这实际上是行不通的。。该值来自通过SOAP消息传入的数组(设计上不是强类型),只是一个字符串数组。我使用配置文件的唯一目的是查找数组中值的指针。对不起,我可能应该在我的问题中留下更多细节。“传入的_值[ConfigurationManager.AppSettings[ReferenceKey]]”@stumped221谈到松耦合,我认为您应该修改您的设计。在一个地方加载设置,在另一个地方使用它们,而不关心它们的存储位置和存储方式。我完全同意你的观点。。这对我来说是一次学习的经历,所以我正在研究如何“修改我的设计”,甚至定义和掌握一个松散耦合的好设计。
TypeDescriptor.GetConverter(targetType).ConvertFromInvariantString(configValue)