private static void RemoveSpecificCustomCharacterSetting(string strSettingName) { if (_intDicLoadedCharacterSettingsLoadedStatus <= 1) { return; } CharacterSettings objSettingsToDelete = s_DicLoadedCharacterSettings.FirstOrDefault(x => x.Value.FileName == strSettingName).Value; if (objSettingsToDelete == default) { return; } try { Lazy <string> strBestMatchNewSettingsKey = new Lazy <string>(() => { int intBestScore = int.MinValue; string strReturn = string.Empty; foreach (CharacterSettings objExistingSettings in s_DicLoadedCharacterSettings.Values) { // ReSharper disable once AccessToDisposedClosure if (objSettingsToDelete.DictionaryKey == objExistingSettings.DictionaryKey) { continue; } // ReSharper disable once AccessToDisposedClosure int intLoopScore = CalculateCharacterSettingsMatchScore(objSettingsToDelete, objExistingSettings); if (intLoopScore > intBestScore) { intBestScore = intLoopScore; strReturn = objExistingSettings.DictionaryKey; } } return(strReturn); }); foreach (Character objCharacter in Program.OpenCharacters) { if (objCharacter.SettingsKey == objSettingsToDelete.DictionaryKey) { objCharacter.SettingsKey = strBestMatchNewSettingsKey.Value; } } } finally { s_DicLoadedCharacterSettings.Remove(objSettingsToDelete.DictionaryKey); objSettingsToDelete.Dispose(); } }