From d969dd691b232e33662ce5ccea2692125fa03750 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sat, 20 Sep 2025 17:24:25 -0400 Subject: [PATCH] Remove some unnecessary null handling, use arrays --- .../Data/StaticChecksTests.cs | 8 ++-- BinaryObjectScanner/Data/StaticChecks.cs | 44 +++++++++---------- BinaryObjectScanner/FileType/Executable.cs | 2 +- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/BinaryObjectScanner.Test/Data/StaticChecksTests.cs b/BinaryObjectScanner.Test/Data/StaticChecksTests.cs index dafb7401..6901abd6 100644 --- a/BinaryObjectScanner.Test/Data/StaticChecksTests.cs +++ b/BinaryObjectScanner.Test/Data/StaticChecksTests.cs @@ -9,7 +9,7 @@ namespace BinaryObjectScanner.Test.Data public void ContentCheckClasses_Populated() { var actual = StaticChecks.ContentCheckClasses; - Assert.Equal(6, actual.Count); + Assert.Equal(6, actual.Length); } [Fact] @@ -30,21 +30,21 @@ namespace BinaryObjectScanner.Test.Data public void NewExecutableCheckClasses_Populated() { var actual = StaticChecks.NewExecutableCheckClasses; - Assert.Equal(7, actual.Count); + Assert.Equal(7, actual.Length); } [Fact] public void PathCheckClasses_Populated() { var actual = StaticChecks.PathCheckClasses; - Assert.Equal(68, actual.Count); + Assert.Equal(68, actual.Length); } [Fact] public void PortableExecutableCheckClasses_Populated() { var actual = StaticChecks.PortableExecutableCheckClasses; - Assert.Equal(105, actual.Count); + Assert.Equal(105, actual.Length); } } } \ No newline at end of file diff --git a/BinaryObjectScanner/Data/StaticChecks.cs b/BinaryObjectScanner/Data/StaticChecks.cs index c4ef4cb6..1e5afb31 100644 --- a/BinaryObjectScanner/Data/StaticChecks.cs +++ b/BinaryObjectScanner/Data/StaticChecks.cs @@ -13,72 +13,72 @@ namespace BinaryObjectScanner.Data /// /// Cache for all IContentCheck types /// - public static List ContentCheckClasses + public static IContentCheck[] ContentCheckClasses { get { contentCheckClasses ??= InitCheckClasses(); - return contentCheckClasses ?? []; + return contentCheckClasses; } } /// /// Cache for all IExecutableCheck types /// - public static List> LinearExecutableCheckClasses + public static IExecutableCheck[] LinearExecutableCheckClasses { get { linearExecutableCheckClasses ??= InitCheckClasses>(); - return linearExecutableCheckClasses ?? []; + return linearExecutableCheckClasses; } } /// /// Cache for all IExecutableCheck types /// - public static List> MSDOSExecutableCheckClasses + public static IExecutableCheck[] MSDOSExecutableCheckClasses { get { msdosExecutableCheckClasses ??= InitCheckClasses>(); - return msdosExecutableCheckClasses ?? []; + return msdosExecutableCheckClasses; } } /// /// Cache for all IExecutableCheck types /// - public static List> NewExecutableCheckClasses + public static IExecutableCheck[] NewExecutableCheckClasses { get { newExecutableCheckClasses ??= InitCheckClasses>(); - return newExecutableCheckClasses ?? []; + return newExecutableCheckClasses; } } /// /// Cache for all IPathCheck types /// - public static List PathCheckClasses + public static IPathCheck[] PathCheckClasses { get { pathCheckClasses ??= InitCheckClasses(); - return pathCheckClasses ?? []; + return pathCheckClasses; } } /// /// Cache for all IExecutableCheck types /// - public static List> PortableExecutableCheckClasses + public static IExecutableCheck[] PortableExecutableCheckClasses { get { portableExecutableCheckClasses ??= InitCheckClasses>(); - return portableExecutableCheckClasses ?? []; + return portableExecutableCheckClasses; } } @@ -89,32 +89,32 @@ namespace BinaryObjectScanner.Data /// /// Cache for all IContentCheck types /// - private static List? contentCheckClasses; + private static IContentCheck[]? contentCheckClasses; /// /// Cache for all IExecutableCheck types /// - private static List>? linearExecutableCheckClasses; + private static IExecutableCheck[]? linearExecutableCheckClasses; /// /// Cache for all IExecutableCheck types /// - private static List>? msdosExecutableCheckClasses; + private static IExecutableCheck[]? msdosExecutableCheckClasses; /// /// Cache for all IExecutableCheck types /// - private static List>? newExecutableCheckClasses; + private static IExecutableCheck[]? newExecutableCheckClasses; /// /// Cache for all IPathCheck types /// - private static List? pathCheckClasses; + private static IPathCheck[]? pathCheckClasses; /// /// Cache for all IExecutableCheck types /// - private static List>? portableExecutableCheckClasses; + private static IExecutableCheck[]? portableExecutableCheckClasses; #endregion @@ -123,13 +123,13 @@ namespace BinaryObjectScanner.Data /// /// Initialize all implementations of a type /// - private static List? InitCheckClasses() - => InitCheckClasses(Assembly.GetExecutingAssembly()) ?? []; + private static T[] InitCheckClasses() + => InitCheckClasses(Assembly.GetExecutingAssembly()); /// /// Initialize all implementations of a type /// - private static List InitCheckClasses(Assembly assembly) + private static T[] InitCheckClasses(Assembly assembly) { // Get information from the type param string? interfaceName = typeof(T).FullName; @@ -174,7 +174,7 @@ namespace BinaryObjectScanner.Data classTypes.Add(instance); } - return classTypes; + return [.. classTypes]; } #endregion diff --git a/BinaryObjectScanner/FileType/Executable.cs b/BinaryObjectScanner/FileType/Executable.cs index b3cb1dd8..3868253e 100644 --- a/BinaryObjectScanner/FileType/Executable.cs +++ b/BinaryObjectScanner/FileType/Executable.cs @@ -79,7 +79,7 @@ namespace BinaryObjectScanner.FileType /// Scanner for handling recursive protections /// True to include debug data, false otherwise /// Set of protections in file, empty on error - protected IDictionary RunExecutableChecks(string file, T exe, List checks, bool includeDebug) + protected IDictionary RunExecutableChecks(string file, T exe, U[] checks, bool includeDebug) where U : IExecutableCheck { // Create the output dictionary