我将应用程序的配置详细信息存储在如下表中:

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/

10-10 23:03