diff options
| author | Joshua M. Boniface <joshua@boniface.me> | 2018-12-29 19:40:53 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-29 19:40:53 -0500 |
| commit | 9d91fa8ab8bb1e429d45cf2c0fe54f59c59dff4d (patch) | |
| tree | ebf3a5f911228a57ecefb01dfef6bf45e19fd153 /MediaBrowser.Controller/Entities/BaseItemExtensions.cs | |
| parent | aac1007bdc0167c83ef150d199c27cfaed467e44 (diff) | |
| parent | 64a1a7560ee09b1568e65def65fe51bf84357726 (diff) | |
Merge pull request #321 from EraYaN/fix-issue-320
Fixed #320 by adding an extension method to BaseItem to make a deep copy of an object.
Diffstat (limited to 'MediaBrowser.Controller/Entities/BaseItemExtensions.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItemExtensions.cs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItemExtensions.cs b/MediaBrowser.Controller/Entities/BaseItemExtensions.cs index c56a370a8..8ab1788b5 100644 --- a/MediaBrowser.Controller/Entities/BaseItemExtensions.cs +++ b/MediaBrowser.Controller/Entities/BaseItemExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -61,5 +62,46 @@ namespace MediaBrowser.Controller.Entities item.SetImagePath(imageType, BaseItem.FileSystem.GetFileInfo(file)); } } + + /// <summary> + /// Copies all properties on object. Skips properties that do not exist. + /// </summary> + /// <param name="source">The source object.</param> + /// <param name="dest">The destination object.</param> + public static void DeepCopy<T, TU>(this T source, TU dest) + where T : BaseItem + where TU : BaseItem + { + var sourceProps = typeof (T).GetProperties().Where(x => x.CanRead).ToList(); + var destProps = typeof(TU).GetProperties() + .Where(x => x.CanWrite) + .ToList(); + + foreach (var sourceProp in sourceProps) + { + if (destProps.Any(x => x.Name == sourceProp.Name)) + { + var p = destProps.First(x => x.Name == sourceProp.Name); + p.SetValue(dest, sourceProp.GetValue(source, null), null); + } + + } + + } + + /// <summary> + /// Copies all properties on newly created object. Skips properties that do not exist. + /// </summary> + /// <param name="source">The source object.</param> + public static TU DeepCopy<T, TU>(this T source) + where T : BaseItem + where TU : BaseItem, new() + { + var dest = new TU(); + source.DeepCopy(dest); + return dest; + } + + } } |
