Пример #1
0
        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);
        }
Пример #2
0
 public virtual IReflectClass GetComponentType()
 {
     if (_delegate != null)
     {
         return(_delegate.GetComponentType());
     }
     return(null);
 }
Пример #3
0
 public virtual IReflectClass GetComponentType(IReflectClass a_class)
 {
     while (a_class.IsArray())
     {
         a_class = a_class.GetComponentType();
     }
     return(a_class);
 }
Пример #4
0
		public virtual IReflectClass GetComponentType(IReflectClass a_class)
		{
			while (a_class.IsArray())
			{
				a_class = a_class.GetComponentType();
			}
			return a_class;
		}
Пример #5
0
 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()));
 }
Пример #6
0
 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;
 }
Пример #7
0
        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);
        }
Пример #8
0
        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));
        }
Пример #9
0
 public static IReflectClass BaseType(IReflectClass clazz)
 {
     if (clazz == null)
     {
         return(null);
     }
     if (clazz.IsArray())
     {
         return(BaseType(clazz.GetComponentType()));
     }
     return(clazz);
 }
Пример #10
0
		public static IReflectClass BaseType(IReflectClass clazz)
		{
			if (clazz == null)
			{
				return null;
			}
			if (clazz.IsArray())
			{
				return BaseType(clazz.GetComponentType());
			}
			return clazz;
		}
Пример #11
0
 public virtual bool IsNDimensional(IReflectClass a_class)
 {
     return a_class.GetComponentType().IsArray();
 }
Пример #12
0
 public virtual bool IsNDimensional(IReflectClass a_class)
 {
     return(a_class.GetComponentType().IsArray());
 }
Пример #13
0
		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());
		}