/// <summary> /// 激活指定的模组,若未变化则返回false,模组发生变化则返回true; /// </summary> private static bool LoadModification() { IEnumerable <ModificationInfo> infos = GetActivatedModificationInfos(); if (loadedModifications == null) { foreach (var info in infos) { var modification = modificationFactory.Read(info.ModificationDirectory); loadedModifications.Add(modification); } return(true); } else { bool isChanged = false; List <Modification> newModifications = new List <Modification>(); int startIndex = 0; foreach (var info in infos) { var modification = loadedModifications[startIndex]; if (Equals(modification, info)) { loadedModifications[startIndex] = null; newModifications.Add(modification); } else { isChanged = true; var targetIndex = loadedModifications.FindIndex(startIndex, delegate(Modification value) { if (value == null) { return(false); } return(value.Description.ID == info.Description.ID); }); if (targetIndex >= 0) { modification = loadedModifications[targetIndex]; loadedModifications[targetIndex] = null; newModifications.Add(modification); } else { modification = modificationFactory.Read(info.ModificationDirectory); newModifications.Add(modification); } } } foreach (var old in loadedModifications) { if (old != null) { old.Dispose(); } } loadedModifications.Clear(); loadedModifications.AddRange(newModifications); return(isChanged); } }