static public int InspectCount(this IEnumerable item) { if (item != null) { ICollection collection; if (item.Convert <ICollection>(out collection)) { return(collection.Count); } MethodInfo method = item.GetType().GetFilteredInstanceMethods( Filterer_MethodInfo.IsNamed("get_Count"), Filterer_MethodInfo.CanReturnInto <int>(), Filterer_MethodInfo.HasNoEffectiveParameters() ).GetFirst(); if (method != null) { return((int)method.Invoke(item)); } int count = 0; foreach (object sub_item in item) { count++; } return(count); } return(0); }
static public object InspectGet(this IEnumerable item, int index) { if (item != null) { IList list; if (item.Convert <IList>(out list)) { return(list[index]); } MethodInfo method = item.GetType().GetFilteredInstanceMethods( Filterer_MethodInfo.IsNamed("get_Item"), Filterer_MethodInfo.CanReturnInto <object>(), Filterer_MethodInfo.CanEffectiveParametersHold <int>() ).GetFirst(); if (method != null) { return(method.Invoke(item, new object[] { index })); } int count = 0; foreach (object sub_item in item) { if (count == index) { return(sub_item); } count++; } } return(null); }