From 9c1d2e7b9c982c069481fbaf65c213f8de9194b0 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sat, 4 Apr 2026 13:11:10 -0400 Subject: [PATCH] Streamline metadata cloning --- SabreTools.Metadata.DatItems.Test/DatItemTests.cs | 6 ++++++ SabreTools.Metadata.DatItems/DatItemT.cs | 3 +-- SabreTools.Metadata.DatItems/Formats/Adjuster.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/Analog.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Archive.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/BiosSet.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Blank.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Chip.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Condition.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/ConfLocation.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/ConfSetting.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/Configuration.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/Control.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/DataArea.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/Device.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/DeviceRef.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/DipLocation.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/DipSwitch.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/DipValue.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/Disk.cs | 6 +++++- SabreTools.Metadata.DatItems/Formats/DiskArea.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/Display.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Driver.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Extension.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Feature.cs | 9 ++++++--- SabreTools.Metadata.DatItems/Formats/Info.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Input.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/Instance.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Media.cs | 6 +++++- SabreTools.Metadata.DatItems/Formats/Part.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/PartFeature.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Port.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/RamOption.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Release.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Rom.cs | 6 +++++- SabreTools.Metadata.DatItems/Formats/Sample.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Serials.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/SharedFeat.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Slot.cs | 5 ++--- SabreTools.Metadata.DatItems/Formats/SlotOption.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/SoftwareList.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/Sound.cs | 7 +++++-- SabreTools.Metadata.DatItems/Formats/SourceDetails.cs | 7 +++++-- 44 files changed, 182 insertions(+), 96 deletions(-) diff --git a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs index 58969f46..32028d39 100644 --- a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs +++ b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs @@ -35,6 +35,12 @@ namespace SabreTools.Metadata.DatItems.Test _internal = _internal.DeepClone() as TestDatItemModel ?? [] }; + /// + public override TestDatItemModel GetInternalClone() + { + return _internal.DeepClone() as TestDatItemModel ?? []; + } + /// public override string? GetName() => _nameKey is not null ? _internal.ReadString(_nameKey) : null; diff --git a/SabreTools.Metadata.DatItems/DatItemT.cs b/SabreTools.Metadata.DatItems/DatItemT.cs index fb4eeefa..758a02d4 100644 --- a/SabreTools.Metadata.DatItems/DatItemT.cs +++ b/SabreTools.Metadata.DatItems/DatItemT.cs @@ -1,5 +1,4 @@ using System; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems { @@ -38,7 +37,7 @@ namespace SabreTools.Metadata.DatItems /// /// Get a clone of the current internal model /// - public virtual T GetInternalClone() => (_internal.DeepClone() as T)!; + public abstract T GetInternalClone(); #endregion diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs index 26200da3..60b1d536 100644 --- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs +++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -67,12 +66,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Adjuster(_internal.DeepClone() as Data.Models.Metadata.Adjuster ?? []); + public override object Clone() => new Adjuster(GetInternalClone()); /// public override Data.Models.Metadata.Adjuster GetInternalClone() { - var adjusterItem = base.GetInternalClone(); + var adjusterItem = (_internal as Data.Models.Metadata.Adjuster)?.Clone() as Data.Models.Metadata.Adjuster ?? []; if (Condition is not null) adjusterItem.Condition = Condition.GetInternalClone(); diff --git a/SabreTools.Metadata.DatItems/Formats/Analog.cs b/SabreTools.Metadata.DatItems/Formats/Analog.cs index 15828727..fe068969 100644 --- a/SabreTools.Metadata.DatItems/Formats/Analog.cs +++ b/SabreTools.Metadata.DatItems/Formats/Analog.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -51,7 +50,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Analog(_internal.DeepClone() as Data.Models.Metadata.Analog ?? []); + public override object Clone() => new Analog(GetInternalClone()); + + /// + public override Data.Models.Metadata.Analog GetInternalClone() + => (_internal as Data.Models.Metadata.Analog)?.Clone() as Data.Models.Metadata.Analog ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Archive.cs b/SabreTools.Metadata.DatItems/Formats/Archive.cs index b1a32822..42ed0b54 100644 --- a/SabreTools.Metadata.DatItems/Formats/Archive.cs +++ b/SabreTools.Metadata.DatItems/Formats/Archive.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -242,7 +241,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Archive(_internal.DeepClone() as Data.Models.Metadata.Archive ?? []); + public override object Clone() => new Archive(GetInternalClone()); + + /// + public override Data.Models.Metadata.Archive GetInternalClone() + => (_internal as Data.Models.Metadata.Archive)?.Clone() as Data.Models.Metadata.Archive ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs index 6186aabc..9cad0fe2 100644 --- a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs +++ b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -63,7 +62,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new BiosSet(_internal.DeepClone() as Data.Models.Metadata.BiosSet ?? []); + public override object Clone() => new BiosSet(GetInternalClone()); + + /// + public override Data.Models.Metadata.BiosSet GetInternalClone() + => (_internal as Data.Models.Metadata.BiosSet)?.Clone() as Data.Models.Metadata.BiosSet ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Blank.cs b/SabreTools.Metadata.DatItems/Formats/Blank.cs index ff1254f3..b31e26f1 100644 --- a/SabreTools.Metadata.DatItems/Formats/Blank.cs +++ b/SabreTools.Metadata.DatItems/Formats/Blank.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -45,7 +44,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Blank(_internal.DeepClone() as Data.Models.Metadata.Blank ?? []); + public override object Clone() => new Blank(GetInternalClone()); + + /// + public override Data.Models.Metadata.Blank GetInternalClone() + => (_internal as Data.Models.Metadata.Blank)?.Clone() as Data.Models.Metadata.Blank ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Chip.cs b/SabreTools.Metadata.DatItems/Formats/Chip.cs index addc3037..ac0b6f8f 100644 --- a/SabreTools.Metadata.DatItems/Formats/Chip.cs +++ b/SabreTools.Metadata.DatItems/Formats/Chip.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -81,7 +80,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Chip(_internal.DeepClone() as Data.Models.Metadata.Chip ?? []); + public override object Clone() => new Chip(GetInternalClone()); + + /// + public override Data.Models.Metadata.Chip GetInternalClone() + => (_internal as Data.Models.Metadata.Chip)?.Clone() as Data.Models.Metadata.Chip ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Condition.cs b/SabreTools.Metadata.DatItems/Formats/Condition.cs index 83b850ef..0621276d 100644 --- a/SabreTools.Metadata.DatItems/Formats/Condition.cs +++ b/SabreTools.Metadata.DatItems/Formats/Condition.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -69,7 +68,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Condition(_internal.DeepClone() as Data.Models.Metadata.Condition ?? []); + public override object Clone() => new Condition(GetInternalClone()); + + /// + public override Data.Models.Metadata.Condition GetInternalClone() + => (_internal as Data.Models.Metadata.Condition)?.Clone() as Data.Models.Metadata.Condition ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs index 06068274..cd5ce116 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -63,7 +62,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new ConfLocation(_internal.DeepClone() as Data.Models.Metadata.ConfLocation ?? []); + public override object Clone() => new ConfLocation(GetInternalClone()); + + /// + public override Data.Models.Metadata.ConfLocation GetInternalClone() + => (_internal as Data.Models.Metadata.ConfLocation)?.Clone() as Data.Models.Metadata.ConfLocation ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs index ef585006..6af0334c 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -73,12 +72,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new ConfSetting(_internal.DeepClone() as Data.Models.Metadata.ConfSetting ?? []); + public override object Clone() => new ConfSetting(GetInternalClone()); /// public override Data.Models.Metadata.ConfSetting GetInternalClone() { - var confSettingItem = base.GetInternalClone(); + var confSettingItem = (_internal as Data.Models.Metadata.ConfSetting)?.Clone() as Data.Models.Metadata.ConfSetting ?? []; if (Condition is not null) confSettingItem.Condition = Condition.GetInternalClone(); diff --git a/SabreTools.Metadata.DatItems/Formats/Configuration.cs b/SabreTools.Metadata.DatItems/Formats/Configuration.cs index b6907dbd..2a96bdb1 100644 --- a/SabreTools.Metadata.DatItems/Formats/Configuration.cs +++ b/SabreTools.Metadata.DatItems/Formats/Configuration.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -90,12 +89,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Configuration(_internal.DeepClone() as Data.Models.Metadata.Configuration ?? []); + public override object Clone() => new Configuration(GetInternalClone()); /// public override Data.Models.Metadata.Configuration GetInternalClone() { - var configurationItem = base.GetInternalClone(); + var configurationItem = (_internal as Data.Models.Metadata.Configuration)?.Clone() as Data.Models.Metadata.Configuration ?? []; if (Condition is not null) configurationItem.Condition = Condition.GetInternalClone(); diff --git a/SabreTools.Metadata.DatItems/Formats/Control.cs b/SabreTools.Metadata.DatItems/Formats/Control.cs index 4eebafc5..aaa21346 100644 --- a/SabreTools.Metadata.DatItems/Formats/Control.cs +++ b/SabreTools.Metadata.DatItems/Formats/Control.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -117,7 +116,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Control(_internal.DeepClone() as Data.Models.Metadata.Control ?? []); + public override object Clone() => new Control(GetInternalClone()); + + /// + public override Data.Models.Metadata.Control GetInternalClone() + => (_internal as Data.Models.Metadata.Control)?.Clone() as Data.Models.Metadata.Control ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/DataArea.cs b/SabreTools.Metadata.DatItems/Formats/DataArea.cs index e37ced8e..5d1c4525 100644 --- a/SabreTools.Metadata.DatItems/Formats/DataArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DataArea.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -81,11 +80,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new DataArea(_internal.DeepClone() as Data.Models.Metadata.DataArea ?? []); + public override object Clone() => new DataArea(GetInternalClone()); public override Data.Models.Metadata.DataArea GetInternalClone() { - var partItem = base.GetInternalClone(); + var partItem = (_internal as Data.Models.Metadata.DataArea)?.Clone() as Data.Models.Metadata.DataArea ?? []; if (Rom is not null) partItem.Rom = Array.ConvertAll(Rom, rom => rom.GetInternalClone()); diff --git a/SabreTools.Metadata.DatItems/Formats/Device.cs b/SabreTools.Metadata.DatItems/Formats/Device.cs index 4f79c740..600965fa 100644 --- a/SabreTools.Metadata.DatItems/Formats/Device.cs +++ b/SabreTools.Metadata.DatItems/Formats/Device.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -94,12 +93,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Device(_internal.DeepClone() as Data.Models.Metadata.Device ?? []); + public override object Clone() => new Device(GetInternalClone()); /// public override Data.Models.Metadata.Device GetInternalClone() { - var deviceItem = base.GetInternalClone(); + var deviceItem = (_internal as Data.Models.Metadata.Device)?.Clone() as Data.Models.Metadata.Device ?? []; deviceItem.DeviceType = DeviceType; deviceItem.FixedImage = FixedImage; diff --git a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs index 24da2765..7c16f71a 100644 --- a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs +++ b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -51,7 +50,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new DeviceRef(_internal.DeepClone() as Data.Models.Metadata.DeviceRef ?? []); + public override object Clone() => new DeviceRef(GetInternalClone()); + + /// + public override Data.Models.Metadata.DeviceRef GetInternalClone() + => (_internal as Data.Models.Metadata.DeviceRef)?.Clone() as Data.Models.Metadata.DeviceRef ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs index 9ea4b4c4..2f0d6870 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -63,7 +62,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new DipLocation(_internal.DeepClone() as Data.Models.Metadata.DipLocation ?? []); + public override object Clone() => new DipLocation(GetInternalClone()); + + /// + public override Data.Models.Metadata.DipLocation GetInternalClone() + => (_internal as Data.Models.Metadata.DipLocation)?.Clone() as Data.Models.Metadata.DipLocation ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index 72a398fa..1253d655 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -117,12 +116,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new DipSwitch(_internal.DeepClone() as Data.Models.Metadata.DipSwitch ?? []); + public override object Clone() => new DipSwitch(GetInternalClone()); /// public override Data.Models.Metadata.DipSwitch GetInternalClone() { - var dipSwitchItem = base.GetInternalClone(); + var dipSwitchItem = (_internal as Data.Models.Metadata.DipSwitch)?.Clone() as Data.Models.Metadata.DipSwitch ?? []; if (Condition is not null) dipSwitchItem.Condition = Condition.GetInternalClone(); diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs index 2c0a331b..48da33fb 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -73,12 +72,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new DipValue(_internal.DeepClone() as Data.Models.Metadata.DipValue ?? []); + public override object Clone() => new DipValue(GetInternalClone()); /// public override Data.Models.Metadata.DipValue GetInternalClone() { - var dipValueItem = base.GetInternalClone(); + var dipValueItem = (_internal as Data.Models.Metadata.DipValue)?.Clone() as Data.Models.Metadata.DipValue ?? []; if (Condition is not null) dipValueItem.Condition = Condition.GetInternalClone(); diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index 3816d277..4138aa40 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -139,7 +139,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Disk(_internal.DeepClone() as Data.Models.Metadata.Disk ?? []); + public override object Clone() => new Disk(GetInternalClone()); + + /// + public override Data.Models.Metadata.Disk GetInternalClone() + => (_internal as Data.Models.Metadata.Disk)?.Clone() as Data.Models.Metadata.Disk ?? []; /// /// Convert a disk to the closest Rom approximation diff --git a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs index bfeffe2d..6c08ec64 100644 --- a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -63,11 +62,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new DiskArea(_internal.DeepClone() as Data.Models.Metadata.DiskArea ?? []); + public override object Clone() => new DiskArea(GetInternalClone()); public override Data.Models.Metadata.DiskArea GetInternalClone() { - var partItem = base.GetInternalClone(); + var partItem = (_internal as Data.Models.Metadata.DiskArea)?.Clone() as Data.Models.Metadata.DiskArea ?? []; if (Disk is not null) partItem.Disk = Array.ConvertAll(Disk, rom => rom.GetInternalClone()); diff --git a/SabreTools.Metadata.DatItems/Formats/Display.cs b/SabreTools.Metadata.DatItems/Formats/Display.cs index 7c849e5e..4077ff8d 100644 --- a/SabreTools.Metadata.DatItems/Formats/Display.cs +++ b/SabreTools.Metadata.DatItems/Formats/Display.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -158,7 +157,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Display(_internal.DeepClone() as Data.Models.Metadata.Display ?? []); + public override object Clone() => new Display(GetInternalClone()); + + /// + public override Data.Models.Metadata.Display GetInternalClone() + => (_internal as Data.Models.Metadata.Display)?.Clone() as Data.Models.Metadata.Display ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Driver.cs b/SabreTools.Metadata.DatItems/Formats/Driver.cs index ff5ff018..bc067f8b 100644 --- a/SabreTools.Metadata.DatItems/Formats/Driver.cs +++ b/SabreTools.Metadata.DatItems/Formats/Driver.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -117,7 +116,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Driver(_internal.DeepClone() as Data.Models.Metadata.Driver ?? []); + public override object Clone() => new Driver(GetInternalClone()); + + /// + public override Data.Models.Metadata.Driver GetInternalClone() + => (_internal as Data.Models.Metadata.Driver)?.Clone() as Data.Models.Metadata.Driver ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Extension.cs b/SabreTools.Metadata.DatItems/Formats/Extension.cs index 4762f4cc..6a734f5f 100644 --- a/SabreTools.Metadata.DatItems/Formats/Extension.cs +++ b/SabreTools.Metadata.DatItems/Formats/Extension.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -51,7 +50,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Extension(_internal.DeepClone() as Data.Models.Metadata.Extension ?? []); + public override object Clone() => new Extension(GetInternalClone()); + + /// + public override Data.Models.Metadata.Extension GetInternalClone() + => (_internal as Data.Models.Metadata.Extension)?.Clone() as Data.Models.Metadata.Extension ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Feature.cs b/SabreTools.Metadata.DatItems/Formats/Feature.cs index ad0d4913..dc70d747 100644 --- a/SabreTools.Metadata.DatItems/Formats/Feature.cs +++ b/SabreTools.Metadata.DatItems/Formats/Feature.cs @@ -1,6 +1,5 @@ -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -75,7 +74,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Feature(_internal.DeepClone() as Data.Models.Metadata.Feature ?? []); + public override object Clone() => new Feature(GetInternalClone()); + + /// + public override Data.Models.Metadata.Feature GetInternalClone() + => (_internal as Data.Models.Metadata.Feature)?.Clone() as Data.Models.Metadata.Feature ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Info.cs b/SabreTools.Metadata.DatItems/Formats/Info.cs index 9de391a2..7ee61a84 100644 --- a/SabreTools.Metadata.DatItems/Formats/Info.cs +++ b/SabreTools.Metadata.DatItems/Formats/Info.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -57,7 +56,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Info(_internal.DeepClone() as Data.Models.Metadata.Info ?? []); + public override object Clone() => new Info(GetInternalClone()); + + /// + public override Data.Models.Metadata.Info GetInternalClone() + => (_internal as Data.Models.Metadata.Info)?.Clone() as Data.Models.Metadata.Info ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs index 0e72bd20..d3ffe936 100644 --- a/SabreTools.Metadata.DatItems/Formats/Input.cs +++ b/SabreTools.Metadata.DatItems/Formats/Input.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -92,12 +91,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Input(_internal.DeepClone() as Data.Models.Metadata.Input ?? []); + public override object Clone() => new Input(GetInternalClone()); /// public override Data.Models.Metadata.Input GetInternalClone() { - var inputItem = base.GetInternalClone(); + var inputItem = (_internal as Data.Models.Metadata.Input)?.Clone() as Data.Models.Metadata.Input ?? []; if (Control is not null) inputItem.Control = Array.ConvertAll(Control, control => control.GetInternalClone()); diff --git a/SabreTools.Metadata.DatItems/Formats/Instance.cs b/SabreTools.Metadata.DatItems/Formats/Instance.cs index 10467c95..7c4ddc50 100644 --- a/SabreTools.Metadata.DatItems/Formats/Instance.cs +++ b/SabreTools.Metadata.DatItems/Formats/Instance.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -57,7 +56,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Instance(_internal.DeepClone() as Data.Models.Metadata.Instance ?? []); + public override object Clone() => new Instance(GetInternalClone()); + + /// + public override Data.Models.Metadata.Instance GetInternalClone() + => (_internal as Data.Models.Metadata.Instance)?.Clone() as Data.Models.Metadata.Instance ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Media.cs b/SabreTools.Metadata.DatItems/Formats/Media.cs index a375cdcd..8046f74c 100644 --- a/SabreTools.Metadata.DatItems/Formats/Media.cs +++ b/SabreTools.Metadata.DatItems/Formats/Media.cs @@ -92,7 +92,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Media(_internal.DeepClone() as Data.Models.Metadata.Media ?? []); + public override object Clone() => new Media(GetInternalClone()); + + /// + public override Data.Models.Metadata.Media GetInternalClone() + => (_internal as Data.Models.Metadata.Media)?.Clone() as Data.Models.Metadata.Media ?? []; /// /// Convert a media to the closest Rom approximation diff --git a/SabreTools.Metadata.DatItems/Formats/Part.cs b/SabreTools.Metadata.DatItems/Formats/Part.cs index f2253d6a..13cae7ae 100644 --- a/SabreTools.Metadata.DatItems/Formats/Part.cs +++ b/SabreTools.Metadata.DatItems/Formats/Part.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -93,12 +92,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Part(_internal.DeepClone() as Data.Models.Metadata.Part ?? []); + public override object Clone() => new Part(GetInternalClone()); /// public override Data.Models.Metadata.Part GetInternalClone() { - var partItem = base.GetInternalClone(); + var partItem = (_internal as Data.Models.Metadata.Part)?.Clone() as Data.Models.Metadata.Part ?? []; if (DataArea is not null) partItem.DataArea = Array.ConvertAll(DataArea, dataArea => dataArea.GetInternalClone()); diff --git a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs index 10972be5..c074b544 100644 --- a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs +++ b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -80,7 +79,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new PartFeature(_internal.DeepClone() as Data.Models.Metadata.Feature ?? []); + public override object Clone() => new PartFeature(GetInternalClone()); + + /// + public override Data.Models.Metadata.Feature GetInternalClone() + => (_internal as Data.Models.Metadata.Feature)?.Clone() as Data.Models.Metadata.Feature ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Port.cs b/SabreTools.Metadata.DatItems/Formats/Port.cs index 4d67d41b..adfc986d 100644 --- a/SabreTools.Metadata.DatItems/Formats/Port.cs +++ b/SabreTools.Metadata.DatItems/Formats/Port.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -62,12 +61,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Port(_internal.DeepClone() as Data.Models.Metadata.Port ?? []); + public override object Clone() => new Port(GetInternalClone()); /// public override Data.Models.Metadata.Port GetInternalClone() { - var portItem = base.GetInternalClone(); + var portItem = (_internal as Data.Models.Metadata.Port)?.Clone() as Data.Models.Metadata.Port ?? []; if (Analog is not null) portItem.Analog = Array.ConvertAll(Analog, analog => analog.GetInternalClone()); diff --git a/SabreTools.Metadata.DatItems/Formats/RamOption.cs b/SabreTools.Metadata.DatItems/Formats/RamOption.cs index b0360521..68f78055 100644 --- a/SabreTools.Metadata.DatItems/Formats/RamOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/RamOption.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -63,7 +62,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new RamOption(_internal.DeepClone() as Data.Models.Metadata.RamOption ?? []); + public override object Clone() => new RamOption(GetInternalClone()); + + /// + public override Data.Models.Metadata.RamOption GetInternalClone() + => (_internal as Data.Models.Metadata.RamOption)?.Clone() as Data.Models.Metadata.RamOption ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Release.cs b/SabreTools.Metadata.DatItems/Formats/Release.cs index faaa3207..a700380f 100644 --- a/SabreTools.Metadata.DatItems/Formats/Release.cs +++ b/SabreTools.Metadata.DatItems/Formats/Release.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -75,7 +74,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Release(_internal.DeepClone() as Data.Models.Metadata.Release ?? []); + public override object Clone() => new Release(GetInternalClone()); + + /// + public override Data.Models.Metadata.Release GetInternalClone() + => (_internal as Data.Models.Metadata.Release)?.Clone() as Data.Models.Metadata.Release ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs b/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs index 6668060b..ee887863 100644 --- a/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs +++ b/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -140,7 +139,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new ReleaseDetails(_internal.DeepClone() as Data.Models.Metadata.ReleaseDetails ?? []); + public override object Clone() => new ReleaseDetails(GetInternalClone()); + + /// + public override Data.Models.Metadata.ReleaseDetails GetInternalClone() + => (_internal as Data.Models.Metadata.ReleaseDetails)?.Clone() as Data.Models.Metadata.ReleaseDetails ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index beb4ed44..92bdc2f2 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -402,7 +402,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Rom(_internal.DeepClone() as Data.Models.Metadata.Rom ?? []); + public override object Clone() => new Rom(GetInternalClone()); + + /// + public override Data.Models.Metadata.Rom GetInternalClone() + => (_internal as Data.Models.Metadata.Rom)?.Clone() as Data.Models.Metadata.Rom ?? []; #endregion diff --git a/SabreTools.Metadata.DatItems/Formats/Sample.cs b/SabreTools.Metadata.DatItems/Formats/Sample.cs index 45caa20d..d2b28deb 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sample.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sample.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -51,7 +50,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Sample(_internal.DeepClone() as Data.Models.Metadata.Sample ?? []); + public override object Clone() => new Sample(GetInternalClone()); + + /// + public override Data.Models.Metadata.Sample GetInternalClone() + => (_internal as Data.Models.Metadata.Sample)?.Clone() as Data.Models.Metadata.Sample ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Serials.cs b/SabreTools.Metadata.DatItems/Formats/Serials.cs index 5660d157..c9fb8c6b 100644 --- a/SabreTools.Metadata.DatItems/Formats/Serials.cs +++ b/SabreTools.Metadata.DatItems/Formats/Serials.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -129,7 +128,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Serials(_internal.DeepClone() as Data.Models.Metadata.Serials ?? []); + public override object Clone() => new Serials(GetInternalClone()); + + /// + public override Data.Models.Metadata.Serials GetInternalClone() + => (_internal as Data.Models.Metadata.Serials)?.Clone() as Data.Models.Metadata.Serials ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs index 93e20006..7faff216 100644 --- a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs +++ b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -57,7 +56,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new SharedFeat(_internal.DeepClone() as Data.Models.Metadata.SharedFeat ?? []); + public override object Clone() => new SharedFeat(GetInternalClone()); + + /// + public override Data.Models.Metadata.SharedFeat GetInternalClone() + => (_internal as Data.Models.Metadata.SharedFeat)?.Clone() as Data.Models.Metadata.SharedFeat ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Slot.cs b/SabreTools.Metadata.DatItems/Formats/Slot.cs index 80f1aa04..d331501e 100644 --- a/SabreTools.Metadata.DatItems/Formats/Slot.cs +++ b/SabreTools.Metadata.DatItems/Formats/Slot.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -62,12 +61,12 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Slot(_internal.DeepClone() as Data.Models.Metadata.Slot ?? []); + public override object Clone() => new Slot(GetInternalClone()); /// public override Data.Models.Metadata.Slot GetInternalClone() { - var slotItem = base.GetInternalClone(); + var slotItem = (_internal as Data.Models.Metadata.Slot)?.Clone() as Data.Models.Metadata.Slot ?? []; if (SlotOption is not null) slotItem.SlotOption = Array.ConvertAll(SlotOption, slotOption => slotOption.GetInternalClone()); diff --git a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs index 49a0b7c1..6a2a649e 100644 --- a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -63,7 +62,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new SlotOption(_internal.DeepClone() as Data.Models.Metadata.SlotOption ?? []); + public override object Clone() => new SlotOption(GetInternalClone()); + + /// + public override Data.Models.Metadata.SlotOption GetInternalClone() + => (_internal as Data.Models.Metadata.SlotOption)?.Clone() as Data.Models.Metadata.SlotOption ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs index 7cb0a213..739dd847 100644 --- a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -69,7 +68,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new SoftwareList(_internal.DeepClone() as Data.Models.Metadata.SoftwareList ?? []); + public override object Clone() => new SoftwareList(GetInternalClone()); + + /// + public override Data.Models.Metadata.SoftwareList GetInternalClone() + => (_internal as Data.Models.Metadata.SoftwareList)?.Clone() as Data.Models.Metadata.SoftwareList ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Sound.cs b/SabreTools.Metadata.DatItems/Formats/Sound.cs index c3bdf427..f12e4d95 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sound.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sound.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -51,7 +50,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new Sound(_internal.DeepClone() as Data.Models.Metadata.Sound ?? []); + public override object Clone() => new Sound(GetInternalClone()); + + /// + public override Data.Models.Metadata.Sound GetInternalClone() + => (_internal as Data.Models.Metadata.Sound)?.Clone() as Data.Models.Metadata.Sound ?? []; #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs b/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs index 624c5b79..47300b8f 100644 --- a/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs +++ b/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -189,7 +188,11 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods /// - public override object Clone() => new SourceDetails(_internal.DeepClone() as Data.Models.Metadata.SourceDetails ?? []); + public override object Clone() => new SourceDetails(GetInternalClone()); + + /// + public override Data.Models.Metadata.SourceDetails GetInternalClone() + => (_internal as Data.Models.Metadata.SourceDetails)?.Clone() as Data.Models.Metadata.SourceDetails ?? []; #endregion }