internal static void FlattenCollection1(ObjectContainerBase stream, Object obj, Collection4 collection4) { Array arr = obj as Array; if (arr != null) { IReflectArray reflectArray = stream.Reflector().Array(); Object[] flat = new Object[arr.Length]; reflectArray.Flatten(obj, reflectArray.Dimensions(obj), 0, flat, 0); for (int i = 0; i < flat.Length; i++) { FlattenCollection1(stream, flat[i], collection4); } } else { // If obj implements IEnumerable, add all elements to collection4 IEnumerator enumerator = GetCollectionEnumerator(obj, true); // Add elements to collection if conversion was succesful if (enumerator != null) { if (enumerator is IDictionaryEnumerator) { IDictionaryEnumerator dictEnumerator = enumerator as IDictionaryEnumerator; while (enumerator.MoveNext()) { FlattenCollection1(stream, dictEnumerator.Key, collection4); } } else { while (enumerator.MoveNext()) { // recursive call to flatten Collections in Collections FlattenCollection1(stream, enumerator.Current, collection4); } } } else { // If obj is not a Collection, it still needs to be collected. collection4.Add(obj); } } }
public virtual int Flatten(object a_shaped, int[] a_dimensions, int a_currentDimension , object[] a_flat, int a_flatElement) { return(_delegate.Flatten(a_shaped, a_dimensions, a_currentDimension, a_flat, a_flatElement )); }