我有一个具有各种属性的对象模型MyObject.有一次,我有两个这样的MyObject实例:实例A和实例B.如果实例B具有非空值,我想将实例A中的属性与实例B的属性进行复制和替换.
如果我只有1个具有3个属性的类,没问题,我可以轻松地对其进行硬编码(这是我开始做的).但实际上我有12个不同的对象模型,每个模型大约有10个属性.
有什么好办法呢?
Bas*_*Bas 43
更新如果需要大量调用此方法,
请改用AutoMapper.Automapper使用构建动态方法,Reflection.Emit
并且比反射快得多.
您可以使用反射复制属性的值:
public void CopyValues<T>(T target, T source)
{
Type t = typeof(T);
var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);
foreach (var prop in properties)
{
var value = prop.GetValue(source, null);
if (value != null)
prop.SetValue(target, value, null);
}
}
Run Code Online (Sandbox Code Playgroud)
我把它做成通用的,以确保类型安全.如果要包含私有属性,则应使用Type.GetProperties()的重写,指定绑定标志.
我已经尝试过Kyle Finley将两个对象合并为一个匿名类型,它的工作非常完美.
与TypeMerger
合并一样简单
var obj1 = new {foo = "foo"};
var obj2 = new {bar = "bar"};
var mergedObject = TypeMerger.MergeTypes(obj1 , obj2 );
Run Code Online (Sandbox Code Playgroud)
这就是你得到了合并的对象,除此之外,还有一个规定可以忽略特定的属性.你也可以对MVC3使用相同的东西.
归档时间: |
|
查看次数: |
60210 次 |
最近记录: |