Reduce Reflection use in object creation

This commit is contained in:
Matt Nadareski
2026-03-26 23:59:53 -04:00
parent 9929199f31
commit 1212603414
2 changed files with 38 additions and 37 deletions

View File

@@ -85,32 +85,14 @@ namespace SabreTools.Metadata.DatFiles
public DatHeader(Data.Models.Metadata.Header header)
{
// Create a new internal model
_internal = [];
_internal = header;
// Get all fields to automatically copy without processing
var nonItemFields = TypeHelper.GetConstants(typeof(Data.Models.Metadata.Header));
if (nonItemFields is not null)
{
// Populate the internal machine from non-filter fields
foreach (string fieldName in nonItemFields)
{
if (header.TryGetValue(fieldName, out var fieldValue))
_internal[fieldName] = fieldValue;
}
}
// Get all fields specific to the DatFiles implementation
var nonStandardFields = TypeHelper.GetConstants(typeof(DatHeader));
if (nonStandardFields is not null)
{
// Populate the internal machine from filter fields
foreach (string fieldName in nonStandardFields)
{
if (header.TryGetValue(fieldName, out var fieldValue))
_internal[fieldName] = fieldValue;
}
}
// Remove all inverted fields
Remove(Data.Models.Metadata.Header.CanOpenKey);
Remove(Data.Models.Metadata.Header.ImagesKey);
Remove(Data.Models.Metadata.Header.InfosKey);
Remove(Data.Models.Metadata.Header.NewDatKey);
Remove(Data.Models.Metadata.Header.SearchKey);
// Get all no-filter fields
if (header.TryGetValue(Data.Models.Metadata.Header.CanOpenKey, out var canOpenValue))

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
@@ -22,18 +22,37 @@ namespace SabreTools.Metadata.DatItems
public Machine(Data.Models.Metadata.Machine machine)
{
// Get all fields to automatically copy without processing
var nonItemFields = TypeHelper.GetConstants(typeof(Data.Models.Metadata.Machine));
if (nonItemFields is null)
return;
_internal = machine;
// Populate the internal machine from non-filter fields
_internal = [];
foreach (string fieldName in nonItemFields)
{
if (machine.TryGetValue(fieldName, out var fieldValue))
_internal[fieldName] = fieldValue;
}
// Remove all inverted fields
Remove(Data.Models.Metadata.Machine.AdjusterKey);
Remove(Data.Models.Metadata.Machine.ArchiveKey);
Remove(Data.Models.Metadata.Machine.BiosSetKey);
Remove(Data.Models.Metadata.Machine.ChipKey);
Remove(Data.Models.Metadata.Machine.ConfigurationKey);
Remove(Data.Models.Metadata.Machine.DeviceKey);
Remove(Data.Models.Metadata.Machine.DeviceRefKey);
Remove(Data.Models.Metadata.Machine.DipSwitchKey);
Remove(Data.Models.Metadata.Machine.DiskKey);
Remove(Data.Models.Metadata.Machine.DisplayKey);
Remove(Data.Models.Metadata.Machine.DriverKey);
Remove(Data.Models.Metadata.Machine.DumpKey);
Remove(Data.Models.Metadata.Machine.FeatureKey);
Remove(Data.Models.Metadata.Machine.InfoKey);
Remove(Data.Models.Metadata.Machine.InputKey);
Remove(Data.Models.Metadata.Machine.MediaKey);
Remove(Data.Models.Metadata.Machine.PartKey);
Remove(Data.Models.Metadata.Machine.PortKey);
Remove(Data.Models.Metadata.Machine.RamOptionKey);
Remove(Data.Models.Metadata.Machine.ReleaseKey);
Remove(Data.Models.Metadata.Machine.RomKey);
Remove(Data.Models.Metadata.Machine.SampleKey);
Remove(Data.Models.Metadata.Machine.SharedFeatKey);
Remove(Data.Models.Metadata.Machine.SlotKey);
Remove(Data.Models.Metadata.Machine.SoftwareListKey);
Remove(Data.Models.Metadata.Machine.SoundKey);
Remove(Data.Models.Metadata.Machine.TruripKey);
Remove(Data.Models.Metadata.Machine.VideoKey);
// Process flag values
string? im1Crc = ReadString(Data.Models.Metadata.Machine.Im1CRCKey);