我将应用程序的配置详细信息存储在如下表中:
SettingName SettingValue
-------------------- ---------------------
PostsPerPage 10
EmailErrors True
AdminEmailAddress [email protected]
我的dataaccess类说返回存储在表中的设置的namevaluecollection/keyvaluepair。
将namevaluecollection/keyvaluepair映射到一个强类型的类(如下面的类,其属性与SettingName列中的名称相同)的最佳方式是什么。
public class Settings
{
public int PostsPerPage{get;set;}
public bool EmailErrors{get;set;}
public string AdminEmailAddress{get;set;}
}
最佳答案
使用反射。用伪代码:
Settings mySettingsClass = new Settings();
foreach (KeyValuePair<string, object> kvp in mySettings)
{
PropertyInfo pi = mySettingsClass.GetType().GetProperty(kvp.key, BindingFlags.Public | BindingFlags.Instance);
if (pi != null)
{
pi.SetValue(mySettingsClass, kvp.Value, null);
}
}
当然,如果您是从dataReader中读回它,则可以采取略有不同的方法,并避免使用反射(因为DataReader的结构和目标对象的结构是已知的)。在这种情况下,使用反射比较慢,但是是将数据从一个项目映射到另一个项目的一种好方法-基本上,您需要获取source属性,查看目标对象上是否存在目标属性,然后如果存在则分配值。
关于c# - 如何将namevaluecollection自动映射到强类型的类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2338220/