我想克隆一个对象到另一个对象,但从原始对象中排除一个属性。例如,如果对象A具有Name,Salary,Location,那么如果我排除了Location属性,克隆对象应该只有Name和salary属性。谢谢。将对象克隆到另一个对象,但排除某些属性?
0
A
回答
0
下面是我用来做一个扩展方法:
public static T CloneExcept<T, S>(this T target, S source, string[] propertyNames)
{
if (source == null)
{
return target;
}
Type sourceType = typeof(S);
Type targetType = typeof(T);
BindingFlags flags = BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance;
PropertyInfo[] properties = sourceType.GetProperties();
foreach (PropertyInfo sPI in properties)
{
if (!propertyNames.Contains(sPI.Name))
{
PropertyInfo tPI = targetType.GetProperty(sPI.Name, flags);
if (tPI != null && tPI.PropertyType.IsAssignableFrom(sPI.PropertyType))
{
tPI.SetValue(target, sPI.GetValue(source, null), null);
}
}
}
return target;
}
您可能还检查出Automapper。
这里是我如何使用扩展的一个例子。
var skipProperties = new[] { "Id", "DataSession_Id", "CoverNumber", "CusCode", "BoundAttempted", "BoundSuccess", "DataSession", "DataSessions","Carriers" };
DataSession.Quote = new Quote().CloneExcept(lastSession.Quote, skipProperties);
由于这是作为扩展方法实现的,因此它会修改调用对象并为了方便而返回它。这是在[question]中讨论的:Best way to clone properties of disparate objects
0
如果您在谈论java,那么您可以尝试使用“transient”关键字。至少这适用于序列化。
相关问题
- 1. 将对象复制到另一个对象,但删除了某些属性Windows Phone 8
- 2. Linq选择某些属性到另一个对象?
- 3. 克隆一个对象
- 4. 将对象动态添加到另一个对象的属性
- 5. 过滤器和克隆对象属性
- 6. 克隆对象
- 7. 克隆除每个键的给定属性以外的对象
- 8. 克隆对象只有一些参数
- 9. NSMutableArray删除对象正在克隆数组中的另一个对象
- 10. 如何将对象的属性绑定到另一个对象的属性? (C#)
- 11. 根据某些属性将对象与现有对象关联
- 12. 如何从ASP.NET中的对象中排除某些属性WebApi
- 13. Java扩展一个对象,除了父母的某些属性
- 14. fabricJS - 选择多个对象克隆对象到另一个画布出错
- 15. 使用Linq,按某些属性排序对象并选择前2个对象
- 16. 克隆对象到$这
- 17. Rails的:返回克隆的对象加上多一个属性
- 18. 克隆整个对象图
- 19. mongodb:将数组属性从一个对象复制到另一个对象
- 20. Groovy - 将属性从一个对象绑定到另一个对象
- 21. 克隆Java对象
- 22. PHP - 对象克隆
- 23. 克隆dom.Document对象
- 24. 深克隆对象
- 25. 使用反射复制对象属性到另一个对象
- 26. 将事件与对象一起克隆?
- 27. 无法确定某个对象的某个属性是否大于该对象的另一个属性
- 28. 如何将JavaScript对象从PascalCase属性克隆到camelCase属性(JavaScript中)?
- 29. 从另一个对象分配一个对象属性
- 30. 将对象属性初始化为DataGridView中另一个对象属性的值
不,我正在使用C#。 – user282807 2012-02-17 01:30:55
@ user282807下一次为该问题设置适当的语言标记(如果语言特定的话) - 可以节省解析不相关的答案和其他写入的问题;-)幸运的是,好的社区成员这次已经为您添加了该标记 – mbx 2018-01-23 12:35:43