From cbd875376ee789369ac7f3cadd1d18e05bfe59e0 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Fri, 26 Mar 2021 11:17:52 +1000 Subject: [PATCH] Add and use FirstOrNull ext. method for collections of value types This reverts commit 5567a42bb1c7b3b6b5293057760f673551c291c4. --- .../fwmanager/FirmwareManager.cs | 10 +++++----- .../Extensions/CollectionExtensions.cs | 13 +++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs b/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs index 5418344b76..3691c87b1e 100644 --- a/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs +++ b/src/BizHawk.Client.Common/fwmanager/FirmwareManager.cs @@ -7,6 +7,7 @@ using System.IO; using System.Linq; using BizHawk.Common.BufferExtensions; +using BizHawk.Common.CollectionExtensions; using BizHawk.Emulation.Common; namespace BizHawk.Client.Common @@ -125,12 +126,11 @@ namespace BizHawk.Client.Common foreach (var fr in FirmwareDatabase.FirmwareRecords) { _resolutionDictionary.Remove(fr); // clear previous resolution results - // check each acceptable option for this firmware, looking for the first that's in the reader's file list - FirmwareOption fo = FirmwareDatabase.FirmwareOptions.FirstOrDefault(fo1 => fo1.ID == fr.ID && fo1.IsAcceptableOrIdeal && reader.Dict.ContainsKey(fo1.Hash)); - if (fo.Size == 0) - continue; - + var found = FirmwareDatabase.FirmwareOptions.FirstOrNull(fo1 => fo1.ID == fr.ID && fo1.IsAcceptableOrIdeal + && reader.Dict.ContainsKey(fo1.Hash)); + if (found == null) continue; // didn't find any of them + var fo = found.Value; // else found one, add it to the dict _resolutionDictionary[fr] = new ResolutionInfo { diff --git a/src/BizHawk.Common/Extensions/CollectionExtensions.cs b/src/BizHawk.Common/Extensions/CollectionExtensions.cs index 52514bc60b..0ef20205de 100644 --- a/src/BizHawk.Common/Extensions/CollectionExtensions.cs +++ b/src/BizHawk.Common/Extensions/CollectionExtensions.cs @@ -104,5 +104,18 @@ namespace BizHawk.Common.CollectionExtensions throw new InvalidOperationException("Item not found"); } + + public static T? FirstOrNull(this IEnumerable list, Func predicate) + where T : struct + { + try + { + return list.First(predicate); + } + catch (InvalidOperationException) + { + return null; + } + } } }