使用通用代码从C#中的另一个对象构建对象

Jam*_*ght 3 c# generics reflection entity-framework

假设我有一个Type User对象,如下所示:

User {
   Name = "Bob",
   Email = "Bob@gmail.com",
   Class = NULL
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以想到一种方法来获取该对象并创建一个这样的对象:

User {
   Name = "Bob",
   Email = "Bob@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)

使用完全通用的代码?这意味着,我不想硬编码任何与Type或Properties相关的代码,因为这段代码需要应用于我网站上的每个实体.(顺便说一句,"用户"类型是一个实体,所以如果它能帮助你更好地编码,请使用它).

我只想提出一个问题的解决方案,我相信Stub实体可能会解决问题,但我需要在不对任何类型或属性进行硬编码的情况下进行.

Pet*_*ter 5

使用反射来实现这一目标:

public void CopyValues<TSource, TTarget>(TSource source, TTarget target)
{
    var sourceProperties = typeof(TSource).GetProperties().Where(p => p.CanRead);

    foreach (var property in sourceProperties)
    {
        var targetProperty = typeof(TTarget).GetProperty(property.Name);

        if (targetProperty != null && targetProperty.CanWrite && targetProperty.PropertyType.IsAssignableFrom(property.PropertyType))
        {
            var value = property.GetValue(source, null);

            targetProperty.SetValue(target, value, null);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)