public virtual int[] Dimensions(object arr) { int count = 0; IReflectClass claxx = _reflector.ForObject(arr); while (claxx.IsArray()) { count++; claxx = claxx.GetComponentType(); } int[] dim = new int[count]; for (int i = 0; i < count; i++) { try { dim[i] = GetLength(arr); arr = Get(arr, 0); } catch (Exception) { return(dim); } } return(dim); }
public virtual IReflectClass GetComponentType() { if (_delegate != null) { return(_delegate.GetComponentType()); } return(null); }
public virtual IReflectClass GetComponentType(IReflectClass a_class) { while (a_class.IsArray()) { a_class = a_class.GetComponentType(); } return(a_class); }
public virtual IReflectClass GetComponentType(IReflectClass a_class) { while (a_class.IsArray()) { a_class = a_class.GetComponentType(); } return a_class; }
protected virtual bool IsValueTypeOrArrayOfValueType(IReflectClass claxx) { // TODO Optimization: Compute this lazily in ReflectClass; if (_reflector.IsValueType(claxx)) { return(true); } return(claxx.IsArray() && _reflector.IsValueType(claxx.GetComponentType())); }
private ITypeDescription CreateArrayType(TypeName fullName, IReflectClass classInfo, Func<TypeName, Maybe<IReflectClass>> classLookup, IDictionary<string, ITypeDescription> knownTypes) { var innerType = GetOrCreateType(classInfo.GetComponentType(), classLookup, knownTypes); var type = ArrayDescription.Create(innerType, fullName.OrderOfArray); knownTypes[fullName.FullName] = type; return type; }
private ITypeDescription CreateArrayType(TypeName fullName, IReflectClass classInfo, Func <TypeName, Maybe <IReflectClass> > classLookup, IDictionary <string, ITypeDescription> knownTypes) { var innerType = GetOrCreateType(classInfo.GetComponentType(), classLookup, knownTypes); var type = ArrayDescription.Create(innerType, fullName.OrderOfArray); knownTypes[fullName.FullName] = type; return(type); }
public virtual void TestIsNDimensional() { IReflectClass arrayOfArrayOfString = ReflectClass(typeof(string[][])); Assert.IsTrue(arrayOfArrayOfString.IsArray()); IReflectClass arrayOfString = ReflectClass(typeof(string[])); Assert.AreSame(arrayOfString, arrayOfArrayOfString.GetComponentType()); Assert.IsTrue(ArrayReflector().IsNDimensional(arrayOfArrayOfString)); Assert.IsFalse(ArrayReflector().IsNDimensional(arrayOfString)); }
public static IReflectClass BaseType(IReflectClass clazz) { if (clazz == null) { return(null); } if (clazz.IsArray()) { return(BaseType(clazz.GetComponentType())); } return(clazz); }
public static IReflectClass BaseType(IReflectClass clazz) { if (clazz == null) { return null; } if (clazz.IsArray()) { return BaseType(clazz.GetComponentType()); } return clazz; }
public virtual bool IsNDimensional(IReflectClass a_class) { return a_class.GetComponentType().IsArray(); }
public virtual bool IsNDimensional(IReflectClass a_class) { return(a_class.GetComponentType().IsArray()); }
protected virtual bool IsValueTypeOrArrayOfValueType(IReflectClass claxx) { // TODO Optimization: Compute this lazily in ReflectClass; if (_reflector.IsValueType(claxx)) { return true; } return claxx.IsArray() && _reflector.IsValueType(claxx.GetComponentType()); }