From a64b109d2cf0945d405491dcaccba2dbdcc4335f Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 13 Nov 2024 01:29:36 -0500 Subject: [PATCH] Remove unncessary Linq usage --- .../Attributes/AttributeHelper.cs | 17 +--- SabreTools.RedumpLib/Builder.cs | 34 +++---- SabreTools.RedumpLib/Data/Extensions.cs | 83 +++++----------- SabreTools.RedumpLib/Formatter.cs | 95 +++--------------- SabreTools.RedumpLib/Validator.cs | 3 - SabreTools.RedumpLib/Web/Packs.cs | 99 ++----------------- SabreTools.RedumpLib/Web/RedumpClient.cs | 19 ---- 7 files changed, 55 insertions(+), 295 deletions(-) diff --git a/SabreTools.RedumpLib/Attributes/AttributeHelper.cs b/SabreTools.RedumpLib/Attributes/AttributeHelper.cs index af6507b..a8a16b4 100644 --- a/SabreTools.RedumpLib/Attributes/AttributeHelper.cs +++ b/SabreTools.RedumpLib/Attributes/AttributeHelper.cs @@ -1,7 +1,4 @@ using System; -#if NET40_OR_GREATER || NETCOREAPP -using System.Linq; -#endif namespace SabreTools.RedumpLib.Attributes { @@ -34,19 +31,7 @@ namespace SabreTools.RedumpLib.Attributes return null; // Get the enum value info from the array, if possible -#if NET20 || NET35 - System.Reflection.MemberInfo? enumValueMemberInfo = null; - foreach (var m in memberInfos) - { - if (m.DeclaringType != enumType) - continue; - - enumValueMemberInfo = m; - break; - } -#else - var enumValueMemberInfo = memberInfos.FirstOrDefault(m => m.DeclaringType == enumType); -#endif + var enumValueMemberInfo = Array.Find(memberInfos, m => m.DeclaringType == enumType); if (enumValueMemberInfo == null) return null; diff --git a/SabreTools.RedumpLib/Builder.cs b/SabreTools.RedumpLib/Builder.cs index a72ac4a..fdb6854 100644 --- a/SabreTools.RedumpLib/Builder.cs +++ b/SabreTools.RedumpLib/Builder.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.IO; #if NET40_OR_GREATER || NETCOREAPP -using System.Linq; using System.Net; #endif using System.Text; @@ -272,12 +271,11 @@ namespace SabreTools.RedumpLib { info.CommonDiscInfo!.Title = title.Substring(0, firstParenLocation); var submatches = Constants.DiscNumberLetterRegex.Matches(title); -#if NET20 || NET35 - foreach (Match submatch in submatches) -#else - foreach (Match submatch in submatches.Cast()) -#endif + foreach (Match? submatch in submatches) { + if (submatch == null) + continue; + var submatchValue = submatch.Groups[1].Value; // Disc number or letter @@ -285,11 +283,7 @@ namespace SabreTools.RedumpLib info.CommonDiscInfo.DiscNumberLetter = submatchValue.Remove(0, "Disc ".Length); // Issue number -#if NET20 || NET35 - else if (long.TryParse(submatchValue, out _)) -#else - else if (submatchValue.All(c => char.IsNumber(c))) -#endif + else if (ulong.TryParse(submatchValue, out _)) info.CommonDiscInfo.Title += $" ({submatchValue})"; // Disc title @@ -329,12 +323,11 @@ namespace SabreTools.RedumpLib if (matches.Count > 0) { var tempLanguages = new List(); -#if NET20 || NET35 - foreach (Match submatch in matches) -#else - foreach (Match submatch in matches.Cast()) -#endif + foreach (Match? submatch in matches) { + if (submatch == null) + continue; + var language = Extensions.ToLanguage(submatch.Groups[1].Value); if (language != null) tempLanguages.Add(language); @@ -380,12 +373,11 @@ namespace SabreTools.RedumpLib tempDumpers.Add(dumper); } -#if NET20 || NET35 - foreach (Match submatch in matches) -#else - foreach (Match submatch in matches.Cast()) -#endif + foreach (Match? submatch in matches) { + if (submatch == null) + continue; + string? dumper = WebUtility.HtmlDecode(submatch.Groups[1].Value); if (dumper != null) tempDumpers.Add(dumper); diff --git a/SabreTools.RedumpLib/Data/Extensions.cs b/SabreTools.RedumpLib/Data/Extensions.cs index ce57bac..44f1869 100644 --- a/SabreTools.RedumpLib/Data/Extensions.cs +++ b/SabreTools.RedumpLib/Data/Extensions.cs @@ -793,7 +793,8 @@ namespace SabreTools.RedumpLib.Data /// /// /// - public static string? LongName(this DiscCategory? category) => AttributeHelper.GetAttribute(category)?.LongName; + public static string? LongName(this DiscCategory? category) + => AttributeHelper.GetAttribute(category)?.LongName; /// /// Get the Category enum value for a given string @@ -830,7 +831,8 @@ namespace SabreTools.RedumpLib.Data /// /// /// - public static string? LongName(this DiscType? discType) => AttributeHelper.GetAttribute(discType)?.LongName; + public static string? LongName(this DiscType? discType) + => AttributeHelper.GetAttribute(discType)?.LongName; /// /// Get the DiscType enum value for a given string @@ -896,7 +898,8 @@ namespace SabreTools.RedumpLib.Data /// /// /// - public static string? LongName(this Language? language) => AttributeHelper.GetAttribute(language)?.LongName; + public static string? LongName(this Language? language) + => AttributeHelper.GetAttribute(language)?.LongName; /// /// Get the Redump shortnames for each known language @@ -925,17 +928,7 @@ namespace SabreTools.RedumpLib.Data /// Language represented by the string, if possible public static Language? ToLanguage(string lang) { -#if NET20 || NET35 - var languages = new List(); - foreach (Language l in Enum.GetValues(typeof(Language))) - { - languages.Add(new Nullable(l)); - } -#else - var languages = Enum.GetValues(typeof(Language)) - .Cast() - .ToList(); -#endif + var languages = (Language?[])Enum.GetValues(typeof(Language)); // Check ISO 639-1 codes #if NET20 || NET35 @@ -948,8 +941,7 @@ namespace SabreTools.RedumpLib.Data languageMapping[l.TwoLetterCode() ?? string.Empty] = l; } #else - Dictionary languageMapping = languages - .Where(l => l.TwoLetterCode() != null) + Dictionary languageMapping = Array.FindAll(languages, l => l.TwoLetterCode() != null) .ToDictionary(l => l.TwoLetterCode() ?? string.Empty, l => l); #endif @@ -967,8 +959,7 @@ namespace SabreTools.RedumpLib.Data languageMapping[l.ThreeLetterCode() ?? string.Empty] = l; } #else - languageMapping = languages - .Where(l => l.ThreeLetterCode() != null) + languageMapping = Array.FindAll(languages, l => l.ThreeLetterCode() != null) .ToDictionary(l => l.ThreeLetterCode() ?? string.Empty, l => l); #endif @@ -986,8 +977,7 @@ namespace SabreTools.RedumpLib.Data languageMapping[l.ThreeLetterCodeAlt() ?? string.Empty] = l; } #else - languageMapping = languages - .Where(l => l.ThreeLetterCodeAlt() != null) + languageMapping = Array.FindAll(languages, l => l.ThreeLetterCodeAlt() != null) .ToDictionary(l => l.ThreeLetterCodeAlt() ?? string.Empty, l => l); #endif @@ -1002,21 +992,24 @@ namespace SabreTools.RedumpLib.Data /// /// /// - public static string? ThreeLetterCode(this Language? language) => (AttributeHelper.GetAttribute(language) as LanguageAttribute)?.ThreeLetterCode; + public static string? ThreeLetterCode(this Language? language) + => (AttributeHelper.GetAttribute(language) as LanguageAttribute)?.ThreeLetterCode; /// /// Get the ISO 639-2 alternate code for each known language /// /// /// - public static string? ThreeLetterCodeAlt(this Language? language) => (AttributeHelper.GetAttribute(language) as LanguageAttribute)?.ThreeLetterCodeAlt; + public static string? ThreeLetterCodeAlt(this Language? language) + => (AttributeHelper.GetAttribute(language) as LanguageAttribute)?.ThreeLetterCodeAlt; /// /// Get the ISO 639-1 code for each known language /// /// /// - public static string? TwoLetterCode(this Language? language) => (AttributeHelper.GetAttribute(language) as LanguageAttribute)?.TwoLetterCode; + public static string? TwoLetterCode(this Language? language) + => (AttributeHelper.GetAttribute(language) as LanguageAttribute)?.TwoLetterCode; #endregion @@ -1114,17 +1107,7 @@ namespace SabreTools.RedumpLib.Data public static Region? ToRegion(string region) { region = region.ToLowerInvariant(); -#if NET20 || NET35 - var regions = new List(); - foreach (Region r in Enum.GetValues(typeof(Region))) - { - regions.Add(new Nullable(r)); - } -#else - var regions = Enum.GetValues(typeof(Region)) - .Cast() - .ToList(); -#endif + var regions = (Region?[])Enum.GetValues(typeof(Region)); // Check ISO 3166-1 alpha-2 codes #if NET20 || NET35 @@ -1137,8 +1120,7 @@ namespace SabreTools.RedumpLib.Data regionMapping[r.ShortName()?.ToLowerInvariant() ?? string.Empty] = r; } #else - Dictionary regionMapping = regions - .Where(r => r.ShortName() != null) + Dictionary regionMapping = Array.FindAll(regions, r => r.ShortName() != null) .ToDictionary(r => r.ShortName()?.ToLowerInvariant() ?? string.Empty, r => r); #endif @@ -1449,31 +1431,10 @@ namespace SabreTools.RedumpLib.Data /// public static List ListSystems() { - var systems = new List(); - -#if NET20 || NET35 - var knownSystems = new List(); - foreach (RedumpSystem s in Enum.GetValues(typeof(RedumpSystem))) - { - var ns = new Nullable(s); - if (ns != null && !ns.IsMarker() && ns.GetCategory() != SystemCategory.NONE) - knownSystems.Add(ns); - } - - knownSystems.Sort((x, y) => (x.LongName() ?? string.Empty).CompareTo(y.LongName() ?? string.Empty)); -#else - var knownSystems = Enum.GetValues(typeof(RedumpSystem)) - .OfType() - .Where(s => s != null && !s.IsMarker() && s.GetCategory() != SystemCategory.NONE) - .OrderBy(s => s.LongName() ?? string.Empty); -#endif - - foreach (var val in knownSystems) - { - systems.Add($"{val.ShortName()} - {val.LongName()}"); - } - - return systems; + var systems = (RedumpSystem?[])Enum.GetValues(typeof(RedumpSystem)); + var knownSystems = Array.FindAll(systems, s => s != null && !s.IsMarker() && s.GetCategory() != SystemCategory.NONE); + Array.Sort(knownSystems, (x, y) => (x.LongName() ?? string.Empty).CompareTo(y.LongName() ?? string.Empty)); + return [.. Array.ConvertAll(knownSystems, val => $"{val.ShortName()} - {val.LongName()}")]; } /// diff --git a/SabreTools.RedumpLib/Formatter.cs b/SabreTools.RedumpLib/Formatter.cs index 374f570..04dfbc8 100644 --- a/SabreTools.RedumpLib/Formatter.cs +++ b/SabreTools.RedumpLib/Formatter.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -#if NET40_OR_GREATER || NETCOREAPP -using System.Linq; -#endif using System.Text.RegularExpressions; using SabreTools.RedumpLib.Data; @@ -60,28 +57,10 @@ namespace SabreTools.RedumpLib AddIfExists(output, Template.FullyMatchingIDField, info.FullyMatchedID?.ToString(), 1); AddIfExists(output, Template.PartiallyMatchingIDsField, info.PartiallyMatchedIDs, 1); AddIfExists(output, Template.RegionField, info.CommonDiscInfo?.Region.LongName() ?? "SPACE! (CHANGE THIS)", 1); -#if NET20 || NET35 - var languages = info.CommonDiscInfo?.Languages ?? [null]; - var languageStrings = new List(); - foreach (var l in languages) - { - languageStrings.Add(l.LongName() ?? "SILENCE! (CHANGE THIS)"); - } - - AddIfExists(output, Template.LanguagesField, languageStrings.ToArray(), 1); - - var langaugeSelections = info.CommonDiscInfo?.LanguageSelection ?? []; - var languageSelectionStrings = new List(); - foreach (var l in langaugeSelections) - { - languageSelectionStrings.Add(l.LongName()); - } - - AddIfExists(output, Template.PlaystationLanguageSelectionViaField, languageSelectionStrings.ToArray(), 1); -#else - AddIfExists(output, Template.LanguagesField, (info.CommonDiscInfo?.Languages ?? [null]).Select(l => l.LongName() ?? "SILENCE! (CHANGE THIS)").ToArray(), 1); - AddIfExists(output, Template.PlaystationLanguageSelectionViaField, (info.CommonDiscInfo?.LanguageSelection ?? []).Select(l => l.LongName()).ToArray(), 1); -#endif + AddIfExists(output, Template.LanguagesField, + Array.ConvertAll(info.CommonDiscInfo?.Languages ?? [null], l => l.LongName() ?? "SILENCE! (CHANGE THIS)"), 1); + AddIfExists(output, Template.PlaystationLanguageSelectionViaField, + Array.ConvertAll(info.CommonDiscInfo?.LanguageSelection ?? [], l => l.LongName()), 1); AddIfExists(output, Template.DiscSerialField, info.CommonDiscInfo?.Serial, 1); // All ringcode information goes in an indented area @@ -307,32 +286,13 @@ namespace SabreTools.RedumpLib info.CommonDiscInfo.Comments = string.Empty; // Add all special fields before any comments -#if NET20 || NET35 - var orderedCommentTags = OrderCommentTags(info.CommonDiscInfo.CommentsSpecialFields); - var commentTagStrings = new List(); - foreach (var kvp in orderedCommentTags) - { - if (string.IsNullOrEmpty(kvp.Value)) - continue; - - string? formatted = FormatSiteTag(kvp); - if (formatted == null) - continue; - - commentTagStrings.Add(formatted); - } - - info.CommonDiscInfo.Comments = string.Join("\n", commentTagStrings.ToArray()) - + "\n" + info.CommonDiscInfo.Comments; -#else info.CommonDiscInfo.Comments = string.Join( "\n", OrderCommentTags(info.CommonDiscInfo.CommentsSpecialFields) - .Where(kvp => !string.IsNullOrEmpty(kvp.Value)) - .Select(FormatSiteTag) - .Where(s => !string.IsNullOrEmpty(s)) + .FindAll(kvp => !string.IsNullOrEmpty(kvp.Value)) + .ConvertAll(FormatSiteTag) + .FindAll(s => !string.IsNullOrEmpty(s)) .ToArray() ) + "\n" + info.CommonDiscInfo.Comments; -#endif // Normalize newlines info.CommonDiscInfo.Comments = info.CommonDiscInfo.Comments.Replace("\r\n", "\n"); @@ -352,32 +312,13 @@ namespace SabreTools.RedumpLib info.CommonDiscInfo.Contents = string.Empty; // Add all special fields before any contents -#if NET20 || NET35 - var orderedContentTags = OrderContentTags(info.CommonDiscInfo.ContentsSpecialFields); - var contentTagStrings = new List(); - foreach (var kvp in orderedContentTags) - { - if (string.IsNullOrEmpty(kvp.Value)) - continue; - - string? formatted = FormatSiteTag(kvp); - if (formatted == null) - continue; - - contentTagStrings.Add(formatted); - } - - info.CommonDiscInfo.Contents = string.Join("\n", contentTagStrings.ToArray()) - + "\n" + info.CommonDiscInfo.Contents; -#else info.CommonDiscInfo.Contents = string.Join( "\n", OrderContentTags(info.CommonDiscInfo.ContentsSpecialFields) - .Where(kvp => !string.IsNullOrEmpty(kvp.Value)) - .Select(FormatSiteTag) - .Where(s => !string.IsNullOrEmpty(s)) + .FindAll(kvp => !string.IsNullOrEmpty(kvp.Value)) + .ConvertAll(FormatSiteTag) + .FindAll(s => !string.IsNullOrEmpty(s)) .ToArray() ) + "\n" + info.CommonDiscInfo.Contents; -#endif // Normalize newlines info.CommonDiscInfo.Contents = info.CommonDiscInfo.Contents.Replace("\r\n", "\n"); @@ -425,11 +366,7 @@ namespace SabreTools.RedumpLib // If the value contains a newline value = value.Replace("\r\n", "\n"); -#if NET20 || NET35 if (value.Contains("\n")) -#else - if (value.Contains('\n')) -#endif { output.Add(prefix + key + ":"); output.Add(""); string[] values = value.Split('\n'); @@ -495,17 +432,7 @@ namespace SabreTools.RedumpLib if (value == null || value.Count == 0) return; -#if NET20 || NET35 - var valueStrings = new List(); - foreach (int o in value) - { - valueStrings.Add(o.ToString()); - } - - AddIfExists(output, key, string.Join(", ", valueStrings.ToArray()), indent); -#else - AddIfExists(output, key, string.Join(", ", value.Select(o => o.ToString()).ToArray()), indent); -#endif + AddIfExists(output, key, string.Join(", ", [.. value.ConvertAll(o => o.ToString())]), indent); } /// diff --git a/SabreTools.RedumpLib/Validator.cs b/SabreTools.RedumpLib/Validator.cs index c9cd5c5..6e01ddd 100644 --- a/SabreTools.RedumpLib/Validator.cs +++ b/SabreTools.RedumpLib/Validator.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -#if NET40_OR_GREATER || NETCOREAPP -using System.Linq; -#endif using System.Threading.Tasks; using SabreTools.RedumpLib.Data; using SabreTools.RedumpLib.Web; diff --git a/SabreTools.RedumpLib/Web/Packs.cs b/SabreTools.RedumpLib/Web/Packs.cs index c564c06..d5d7149 100644 --- a/SabreTools.RedumpLib/Web/Packs.cs +++ b/SabreTools.RedumpLib/Web/Packs.cs @@ -1,10 +1,4 @@ using System; -#if NET20 || NET35 -using System.Collections.Generic; -#endif -#if NET40_OR_GREATER || NETCOREAPP -using System.Linq; -#endif using System.Threading.Tasks; using SabreTools.RedumpLib.Data; @@ -23,92 +17,15 @@ namespace SabreTools.RedumpLib.Web /// True to use named subfolders to store downloads, false to store directly in the output directory public static async Task DownloadPacks(RedumpClient rc, string? outDir, bool useSubfolders) { -#if NET20 || NET35 - var systems = new List(); - foreach (RedumpSystem s in Enum.GetValues(typeof(RedumpSystem))) - { - systems.Add(new Nullable(s)); - } -#elif NET40_OR_GREATER || NETCOREAPP3_1 - var systems = Enum.GetValues(typeof(RedumpSystem)) - .OfType() - .Select(s => new Nullable(s)); -#else - var systems = Enum.GetValues().Select(s => new RedumpSystem?(s)); -#endif + var systems = (RedumpSystem?[])Enum.GetValues(typeof(RedumpSystem)); -#if NET20 || NET35 - var filtered = new List(); - foreach (var s in systems) - { - if (s.HasCues()) - filtered.Add(s); - } - await rc.DownloadPacks(Constants.PackCuesUrl, filtered.ToArray(), "CUEs", outDir, useSubfolders ? "cue" : null); - - filtered = new List(); - foreach (var s in systems) - { - if (s.HasDat()) - filtered.Add(s); - } - await rc.DownloadPacks(Constants.PackDatfileUrl, filtered.ToArray(), "DATs", outDir, useSubfolders ? "dat" : null); - - filtered = new List(); - foreach (var s in systems) - { - if (s.HasCues()) - filtered.Add(s); - } - - filtered = new List(); - foreach (var s in systems) - { - if (s.HasDkeys()) - filtered.Add(s); - } - await rc.DownloadPacks(Constants.PackDkeysUrl, filtered.ToArray(), "Decrypted KEYS", outDir, useSubfolders ? "dkey" : null); - - filtered = new List(); - foreach (var s in systems) - { - if (s.HasGdi()) - filtered.Add(s); - } - await rc.DownloadPacks(Constants.PackGdiUrl, filtered.ToArray(), "GDIs", outDir, useSubfolders ? "gdi" : null); - - filtered = new List(); - foreach (var s in systems) - { - if (s.HasKeys()) - filtered.Add(s); - } - await rc.DownloadPacks(Constants.PackKeysUrl, filtered.ToArray(), "KEYS", outDir, useSubfolders ? "keys" : null); - - filtered = new List(); - foreach (var s in systems) - { - if (s.HasLsd()) - filtered.Add(s); - } - await rc.DownloadPacks(Constants.PackLsdUrl, filtered.ToArray(), "LSD", outDir, useSubfolders ? "lsd" : null); - - filtered = new List(); - foreach (var s in systems) - { - if (s.HasSbi()) - filtered.Add(s); - } - await rc.DownloadPacks(Constants.PackSbiUrl, filtered.ToArray(), "SBIs", outDir, useSubfolders ? "sbi" : null); -#else - await rc.DownloadPacks(Constants.PackCuesUrl, systems.Where(s => s.HasCues()).ToArray(), "CUEs", outDir, useSubfolders ? "cue" : null); - await rc.DownloadPacks(Constants.PackDatfileUrl, systems.Where(s => s.HasDat()).ToArray(), "DATs", outDir, useSubfolders ? "dat" : null); - await rc.DownloadPacks(Constants.PackDkeysUrl, systems.Where(s => s.HasDkeys()).ToArray(), "Decrypted KEYS", outDir, useSubfolders ? "dkey" : null); - await rc.DownloadPacks(Constants.PackGdiUrl, systems.Where(s => s.HasGdi()).ToArray(), "GDIs", outDir, useSubfolders ? "gdi" : null); - await rc.DownloadPacks(Constants.PackKeysUrl, systems.Where(s => s.HasKeys()).ToArray(), "KEYS", outDir, useSubfolders ? "keys" : null); - await rc.DownloadPacks(Constants.PackLsdUrl, systems.Where(s => s.HasLsd()).ToArray(), "LSD", outDir, useSubfolders ? "lsd" : null); - await rc.DownloadPacks(Constants.PackSbiUrl, systems.Where(s => s.HasSbi()).ToArray(), "SBIs", outDir, useSubfolders ? "sbi" : null); -#endif + await rc.DownloadPacks(Constants.PackCuesUrl, Array.FindAll(systems, s => s.HasCues()), "CUEs", outDir, useSubfolders ? "cue" : null); + await rc.DownloadPacks(Constants.PackDatfileUrl, Array.FindAll(systems, s => s.HasDat()), "DATs", outDir, useSubfolders ? "dat" : null); + await rc.DownloadPacks(Constants.PackDkeysUrl, Array.FindAll(systems, s => s.HasDkeys()), "Decrypted KEYS", outDir, useSubfolders ? "dkey" : null); + await rc.DownloadPacks(Constants.PackGdiUrl, Array.FindAll(systems, s => s.HasGdi()), "GDIs", outDir, useSubfolders ? "gdi" : null); + await rc.DownloadPacks(Constants.PackKeysUrl, Array.FindAll(systems, s => s.HasKeys()), "KEYS", outDir, useSubfolders ? "keys" : null); + await rc.DownloadPacks(Constants.PackLsdUrl, Array.FindAll(systems, s => s.HasLsd()), "LSD", outDir, useSubfolders ? "lsd" : null); + await rc.DownloadPacks(Constants.PackSbiUrl, Array.FindAll(systems, s => s.HasSbi()), "SBIs", outDir, useSubfolders ? "sbi" : null); return true; } diff --git a/SabreTools.RedumpLib/Web/RedumpClient.cs b/SabreTools.RedumpLib/Web/RedumpClient.cs index c546a89..9f88e81 100644 --- a/SabreTools.RedumpLib/Web/RedumpClient.cs +++ b/SabreTools.RedumpLib/Web/RedumpClient.cs @@ -1,9 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -#if NET40_OR_GREATER || NETCOREAPP -using System.Linq; -#endif using System.Net; #if NETCOREAPP using System.Net.Http; @@ -219,11 +216,7 @@ namespace SabreTools.RedumpLib.Web // Otherwise, traverse each dump on the page var matches = Constants.DiscRegex.Matches(dumpsPage); -#if NET20 || NET35 foreach (Match? match in matches) -#else - foreach (Match? match in matches.Cast()) -#endif { if (match == null) continue; @@ -278,11 +271,7 @@ namespace SabreTools.RedumpLib.Web // Otherwise, traverse each dump on the page var matches = Constants.DiscRegex.Matches(dumpsPage); -#if NET20 || NET35 foreach (Match? match in matches) -#else - foreach (Match? match in matches.Cast()) -#endif { if (match == null) continue; @@ -325,11 +314,7 @@ namespace SabreTools.RedumpLib.Web // Otherwise, traverse each dump on the page var matches = Constants.NewDiscRegex.Matches(dumpsPage); -#if NET20 || NET35 foreach (Match? match in matches) -#else - foreach (Match? match in matches.Cast()) -#endif { if (match == null) continue; @@ -369,11 +354,7 @@ namespace SabreTools.RedumpLib.Web // Otherwise, traverse each dump on the page var matches = Constants.NewDiscRegex.Matches(dumpsPage); -#if NET20 || NET35 foreach (Match? match in matches) -#else - foreach (Match? match in matches.Cast()) -#endif { if (match == null) continue;