/// <summary> /// (Cross-Game compatible) Return this with all Items of type TCast removed /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TCast">The Type of the Items that you want to remove</typeparam> /// <param name="lockList"></param> /// <returns></returns> public static LockList <TSource> RemoveItemsOfType <TSource, TCast>(this LockList <TSource> lockList) where TSource : Il2CppSystem.Object where TCast : Il2CppSystem.Object { if (!HasItemsOfType <TSource, TCast>(lockList)) { return(lockList); } int numRemoved = 0; List <TSource> arrayList = lockList.ToList(); for (int i = 0; i < lockList.Count; i++) { TSource item = lockList[i]; if (item is null || !item.IsType <TCast>()) { continue; } arrayList.RemoveAt(i - numRemoved); numRemoved++; } return(arrayList.ToLockList()); }
/// <summary> /// (Cross-Game compatible) Return this with the first Item of type TCast removed /// </summary> /// <typeparam name="TSource"></typeparam> /// <typeparam name="TCast">The Type of the Item you want to remove</typeparam> /// <param name="lockList"></param> /// <param name="itemToRemove">The specific Item to remove</param> /// <returns></returns> public static LockList <TSource> RemoveItem <TSource, TCast>(this LockList <TSource> lockList, TCast itemToRemove) where TSource : Il2CppSystem.Object where TCast : Il2CppSystem.Object { if (!HasItemsOfType <TSource, TCast>(lockList)) { return(lockList); } List <TSource> arrayList = lockList.ToList(); for (int i = 0; i < lockList.Count; i++) { TSource item = lockList[i]; if (item is null || !item.Equals(itemToRemove.TryCast <TCast>())) { continue; } arrayList.RemoveAt(i); break; } return(arrayList.ToLockList()); }