Merge pull request #1182 from Bond-009/deepcopy

Speed up DeepCopy
This commit is contained in:
Joshua M. Boniface 2019-04-17 22:11:53 -04:00 committed by GitHub
commit 0539861dc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -64,21 +64,31 @@ namespace MediaBrowser.Controller.Entities
where T : BaseItem where T : BaseItem
where TU : BaseItem where TU : BaseItem
{ {
var sourceProps = typeof(T).GetProperties().Where(x => x.CanRead).ToList(); var destProps = typeof(TU).GetProperties().Where(x => x.CanWrite).ToList();
var destProps = typeof(TU).GetProperties()
.Where(x => x.CanWrite)
.ToList();
foreach (var sourceProp in sourceProps) foreach (var sourceProp in typeof(T).GetProperties())
{ {
if (destProps.Any(x => x.Name == sourceProp.Name)) // We should be able to write to the property
// for both the source and destination type
// This is only false when the derived type hides the base member
// (which we shouldn't copy anyway)
if (!sourceProp.CanRead || !sourceProp.CanWrite)
{ {
var p = destProps.First(x => x.Name == sourceProp.Name); continue;
p.SetValue(dest, sourceProp.GetValue(source, null), null);
} }
} var v = sourceProp.GetValue(source);
if (v == null)
{
continue;
}
var p = destProps.Find(x => x.Name == sourceProp.Name);
if (p != null)
{
p.SetValue(dest, v);
}
}
} }
/// <summary> /// <summary>
@ -93,7 +103,5 @@ namespace MediaBrowser.Controller.Entities
source.DeepCopy(dest); source.DeepCopy(dest);
return dest; return dest;
} }
} }
} }