如何使用新的类值填充当前类?

时间:2011-06-17 14:19:56

标签: c# class-design

这个有点难以解释所以我会首先显示代码..

注意:使示例不那么混乱

public class Class1
{
     public string Title {get;set;}
     public string Name {get;set;}


     public Class1(Class1 class1)
     {
         // ?? How do I populate current class with new class values?
         // ?? this = class1;  - Does not work
         // I want to avoid having to manually set each value
     }
}

感谢您的帮助..在这里我做了什么..在我的扩展课程中创建了这个...所以我现在可以做了

Extensions.MapValues(class1, this);

    public static void MapValues(object from, object to)
    {
        var fromProperties = from.GetType().GetProperties();
        var toProperties = to.GetType().GetProperties();

        foreach (var property in toProperties) {
            var fromProp = fromProperties.SingleOrDefault(x => x.Name.ToLower() == property.Name.ToLower());

            if(fromProp == null) {
                continue;
            }

            var fromValue = fromProp.GetValue(from, null);
            if(fromValue == null) {
                continue;
            }

            property.SetValue(to, fromValue, null);
        }
    }


2 个答案:

答案 0 :(得分:5)

你不能。

您可以手动复制属性,也可以使用返回row.ToClass1()的静态工厂方法替换构造函数。

答案 1 :(得分:1)

手动设置每个值可能更容易

那就是说,如果 DataRow的列名对于您的类中的每个属性是相同的,而如果类型相同,则可以使用Reflection设置属性名称。你会这样做:

public Class1(DataRow row)
{
    var type = typeof(Class1);
    foreach(var col in row.Table.Columns)
    {
        var property = type.GetProperty(col.ColumnName);
        property.SetValue(this, row.Item(col), null);
    }
}