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实体可能会解决问题,但我需要在不对任何类型或属性进行硬编码的情况下进行.
使用反射来实现这一目标:
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)
| 归档时间: |
|
| 查看次数: |
1920 次 |
| 最近记录: |