public static void GetChildObjects( ISaveContext context, ContainerDefinition containerDefinition, ContainerType containerType, object target, List <object> collectedObjects) { if (containerDefinition.CollectObjectsMethod != null) { if (containerDefinition.HasNoChildObject) { return; } containerDefinition.CollectObjectsMethod(target, collectedObjects); } else { switch (containerType) { case ContainerType.List: IList list = (IList)target; for (int index = 0; index < list.Count; ++index) { object childElement = list[index]; if (childElement != null) { ContainerSaveData.ProcessChildObjectElement(childElement, context, collectedObjects); } } break; case ContainerType.Dictionary: IDictionary dictionary = (IDictionary)target; foreach (object key in (IEnumerable)dictionary.Keys) { ContainerSaveData.ProcessChildObjectElement(key, context, collectedObjects); } IEnumerator enumerator1 = dictionary.Values.GetEnumerator(); try { while (enumerator1.MoveNext()) { object current = enumerator1.Current; if (current != null) { ContainerSaveData.ProcessChildObjectElement(current, context, collectedObjects); } } break; } finally { if (enumerator1 is IDisposable disposable8) { disposable8.Dispose(); } } case ContainerType.Array: Array array = (Array)target; for (int index = 0; index < array.Length; ++index) { object childElement = array.GetValue(index); if (childElement != null) { ContainerSaveData.ProcessChildObjectElement(childElement, context, collectedObjects); } } break; case ContainerType.Queue: IEnumerator enumerator2 = ((IEnumerable)target).GetEnumerator(); try { while (enumerator2.MoveNext()) { object current = enumerator2.Current; if (current != null) { ContainerSaveData.ProcessChildObjectElement(current, context, collectedObjects); } } break; } finally { if (enumerator2 is IDisposable disposable9) { disposable9.Dispose(); } } default: using (IEnumerator <object> enumerator3 = ContainerSaveData.GetChildElements(containerType, target).GetEnumerator()) { while (enumerator3.MoveNext()) { ContainerSaveData.ProcessChildObjectElement(enumerator3.Current, context, collectedObjects); } break; } } } }
public IEnumerable <object> GetChildElements() => ContainerSaveData.GetChildElements(this._containerType, this.Target);