GetElementType() public method

public GetElementType ( ) : Type
return Type
コード例 #1
0
        internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type)
        {
            List<int> elementTypes = new List<int>();
            while(type.HasElementType)
            {
                if (type.IsSzArray)
                {
                    elementTypes.Add(SzArray);
                }
                else if (type.IsArray)
                {
                    elementTypes.Add(type.GetArrayRank());
                    elementTypes.Add(Array);
                }
                else if (type.IsPointer)
                {
                    elementTypes.Add(Pointer);
                }
                else if (type.IsByRef)
                {
                    elementTypes.Add(ByRef);
                }
                
                type = (RuntimeType)type.GetElementType();
            }

            info.AddValue("ElementTypes", elementTypes.ToArray(), typeof(int[]));

            return type;
        }
コード例 #2
0
        internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type)
        {
            List <int> list = new List <int>();

            while (type.HasElementType)
            {
                if (type.IsSzArray)
                {
                    list.Add(3);
                }
                else if (type.IsArray)
                {
                    list.Add(type.GetArrayRank());
                    list.Add(2);
                }
                else if (type.IsPointer)
                {
                    list.Add(1);
                }
                else if (type.IsByRef)
                {
                    list.Add(4);
                }
                type = (RuntimeType)type.GetElementType();
            }
            info.AddValue("ElementTypes", list.ToArray(), typeof(int[]));
            return(type);
        }
コード例 #3
0
        internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type)
        {
            List <int> elementTypes = new List <int>();

            while (type.HasElementType)
            {
                if (type.IsSZArray)
                {
                    elementTypes.Add(SzArray);
                }
                else if (type.IsArray)
                {
                    elementTypes.Add(type.GetArrayRank());
                    elementTypes.Add(Array);
                }
                else if (type.IsPointer)
                {
                    elementTypes.Add(Pointer);
                }
                else if (type.IsByRef)
                {
                    elementTypes.Add(ByRef);
                }

                type = (RuntimeType)type.GetElementType();
            }

            info.AddValue("ElementTypes", elementTypes.ToArray(), typeof(int[]));

            return(type);
        }
コード例 #4
0
		internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type)
		{
			List<int> list = new List<int>();
			while (type.HasElementType)
			{
				if (type.IsSzArray)
				{
					list.Add(3);
				}
				else
				{
					if (type.IsArray)
					{
						list.Add(type.GetArrayRank());
						list.Add(2);
					}
					else
					{
						if (type.IsPointer)
						{
							list.Add(1);
						}
						else
						{
							if (type.IsByRef)
							{
								list.Add(4);
							}
						}
					}
				}
				type = (RuntimeType)type.GetElementType();
			}
			info.AddValue("ElementTypes", list.ToArray(), typeof(int[]));
			return type;
		}
 private static CustomAttributeType InitCustomAttributeType(RuntimeType parameterType)
 {
     CustomAttributeEncoding encodedType = TypeToCustomAttributeEncoding(parameterType);
     CustomAttributeEncoding undefined = CustomAttributeEncoding.Undefined;
     CustomAttributeEncoding encodedEnumType = CustomAttributeEncoding.Undefined;
     string enumName = null;
     if (encodedType == CustomAttributeEncoding.Array)
     {
         parameterType = (RuntimeType) parameterType.GetElementType();
         undefined = TypeToCustomAttributeEncoding(parameterType);
     }
     if ((encodedType == CustomAttributeEncoding.Enum) || (undefined == CustomAttributeEncoding.Enum))
     {
         encodedEnumType = TypeToCustomAttributeEncoding((RuntimeType) Enum.GetUnderlyingType(parameterType));
         enumName = parameterType.AssemblyQualifiedName;
     }
     return new CustomAttributeType(encodedType, undefined, encodedEnumType, enumName);
 }
コード例 #6
0
ファイル: CustomAttribute.cs プロジェクト: enavro/coreclr
        [System.Security.SecurityCritical]  // auto-generated
        internal static Attribute[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool includeSecCa, out int count)
        {
            Contract.Requires(type != null);
            Contract.Requires(caType != null);

            count = 0;

            bool all = caType == (RuntimeType)typeof(object) || caType == (RuntimeType)typeof(Attribute);
            if (!all && s_pca.GetValueOrDefault(caType) == null && !IsSecurityAttribute(caType))
                return new Attribute[0];

            List<Attribute> pcas = new List<Attribute>();
            Attribute pca = null;

#if FEATURE_SERIALIZATION
            if (all || caType == (RuntimeType)typeof(SerializableAttribute))
            {
                pca = SerializableAttribute.GetCustomAttribute(type);
                if (pca != null) pcas.Add(pca);
            }
#endif 
            if (all || caType == (RuntimeType)typeof(ComImportAttribute))
            {
                pca = ComImportAttribute.GetCustomAttribute(type);
                if (pca != null) pcas.Add(pca);
            }
            if (includeSecCa && (all || IsSecurityAttribute(caType)))
            {
                if (!type.IsGenericParameter && type.GetElementType() == null)
                {
                    if (type.IsGenericType)
                        type = (RuntimeType)type.GetGenericTypeDefinition();

                    object[] securityAttributes;
                    GetSecurityAttributes(type.Module.ModuleHandle.GetRuntimeModule(), type.MetadataToken, false, out securityAttributes);
                    if (securityAttributes != null)
                        foreach (object a in securityAttributes)
                            if (caType == a.GetType() || a.GetType().IsSubclassOf(caType))
                                pcas.Add((Attribute)a);
                }
            }

            count = pcas.Count;
            return pcas.ToArray();
        }
コード例 #7
0
ファイル: CustomAttribute.cs プロジェクト: enavro/coreclr
        [System.Security.SecurityCritical]  // auto-generated
        internal static Object[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool inherit)
        {
            Contract.Requires(type != null);
            Contract.Requires(caType != null);

            if (type.GetElementType() != null) 
                return (caType.IsValueType) ? EmptyArray<Object>.Value : CreateAttributeArrayHelper(caType, 0);

            if (type.IsGenericType && !type.IsGenericTypeDefinition)
                type = type.GetGenericTypeDefinition() as RuntimeType;

            int pcaCount = 0;
            Attribute[] pca = PseudoCustomAttribute.GetCustomAttributes(type, caType, true, out pcaCount);

            // if we are asked to go up the hierarchy chain we have to do it now and regardless of the
            // attribute usage for the specific attribute because a derived attribute may override the usage...           
            // ... however if the attribute is sealed we can rely on the attribute usage
            if (!inherit || (caType.IsSealed && !CustomAttribute.GetAttributeUsage(caType).Inherited))
            {
                object[] attributes = GetCustomAttributes(type.GetRuntimeModule(), type.MetadataToken, pcaCount, caType, !AllowCriticalCustomAttributes(type));
                if (pcaCount > 0) Array.Copy(pca, 0, attributes, attributes.Length - pcaCount, pcaCount);
                return attributes;
            }

            List<object> result = new List<object>();
            bool mustBeInheritable = false;
            bool useObjectArray = (caType == null || caType.IsValueType || caType.ContainsGenericParameters);
            Type arrayType = useObjectArray ? typeof(object) : caType;

            while (pcaCount > 0)
                result.Add(pca[--pcaCount]);

            while (type != (RuntimeType)typeof(object) && type != null)
            {
                object[] attributes = GetCustomAttributes(type.GetRuntimeModule(), type.MetadataToken, 0, caType, mustBeInheritable, result, !AllowCriticalCustomAttributes(type));
                mustBeInheritable = true;
                for (int i = 0; i < attributes.Length; i++)
                    result.Add(attributes[i]);

                type = type.BaseType as RuntimeType;
            }

            object[] typedResult = CreateAttributeArrayHelper(arrayType, result.Count);
            Array.Copy(result.ToArray(), 0, typedResult, 0, result.Count);
            return typedResult;
        }
コード例 #8
0
ファイル: CustomAttribute.cs プロジェクト: enavro/coreclr
        [System.Security.SecurityCritical]  // auto-generated
        internal static bool IsDefined(RuntimeType type, RuntimeType caType, bool inherit)
        {
            Contract.Requires(type != null);

            if (type.GetElementType() != null) 
                return false;

            if (PseudoCustomAttribute.IsDefined(type, caType))
                return true;

            if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType))
                return true;

            if (!inherit)
                return false;

            type = type.BaseType as RuntimeType;

            while (type != null)
            {
                if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType, 0, inherit))
                    return true;

                type = type.BaseType as RuntimeType;
            }

            return false;
        }
コード例 #9
0
 internal static bool IsDefined(RuntimeType type, RuntimeType caType, bool inherit)
 {
     if (type.GetElementType() == null)
     {
         if (PseudoCustomAttribute.IsDefined(type, caType))
         {
             return true;
         }
         if (IsCustomAttributeDefined(type.Module, type.MetadataToken, caType))
         {
             return true;
         }
         if (!inherit)
         {
             return false;
         }
         type = type.BaseType as RuntimeType;
         while (type != null)
         {
             if (IsCustomAttributeDefined(type.Module, type.MetadataToken, caType, inherit))
             {
                 return true;
             }
             type = type.BaseType as RuntimeType;
         }
     }
     return false;
 }
コード例 #10
0
 internal static object[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool inherit)
 {
     if (type.GetElementType() != null)
     {
         if (!caType.IsValueType)
         {
             return (object[]) Array.CreateInstance(caType, 0);
         }
         return new object[0];
     }
     if (type.IsGenericType && !type.IsGenericTypeDefinition)
     {
         type = type.GetGenericTypeDefinition() as RuntimeType;
     }
     int count = 0;
     Attribute[] sourceArray = PseudoCustomAttribute.GetCustomAttributes(type, caType, true, out count);
     if (!inherit || (caType.IsSealed && !GetAttributeUsage(caType).Inherited))
     {
         object[] objArray = GetCustomAttributes(type.Module, type.MetadataToken, count, caType);
         if (count > 0)
         {
             Array.Copy(sourceArray, 0, objArray, objArray.Length - count, count);
         }
         return objArray;
     }
     List<object> derivedAttributes = new List<object>();
     bool mustBeInheritable = false;
     Type elementType = (((caType == null) || caType.IsValueType) || caType.ContainsGenericParameters) ? typeof(object) : caType;
     while (count > 0)
     {
         derivedAttributes.Add(sourceArray[--count]);
     }
     while ((type != typeof(object)) && (type != null))
     {
         object[] objArray2 = GetCustomAttributes(type.Module, type.MetadataToken, 0, caType, mustBeInheritable, derivedAttributes);
         mustBeInheritable = true;
         for (int i = 0; i < objArray2.Length; i++)
         {
             derivedAttributes.Add(objArray2[i]);
         }
         type = type.BaseType as RuntimeType;
     }
     object[] destinationArray = Array.CreateInstance(elementType, derivedAttributes.Count) as object[];
     Array.Copy(derivedAttributes.ToArray(), 0, destinationArray, 0, derivedAttributes.Count);
     return destinationArray;
 }
コード例 #11
0
        [System.Security.SecurityCritical]  // auto-generated
        internal static bool IsDefined(RuntimeType type, RuntimeType caType, bool inherit)
        {
            Contract.Requires(type != null);

#if !FEATURE_CORECLR
            if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && caType != null)
            {
                FrameworkEventSource.Log.QueryAttributeIsDefined(caType.GetFullNameForEtw());
            }
#endif

            if (type.GetElementType() != null) 
                return false;

            if (PseudoCustomAttribute.IsDefined(type, caType))
                return true;

            if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType))
                return true;

            if (!inherit)
                return false;

            type = type.BaseType as RuntimeType;

            while (type != null)
            {
                if (IsCustomAttributeDefined(type.GetRuntimeModule(), type.MetadataToken, caType, 0, inherit))
                    return true;

                type = type.BaseType as RuntimeType;
            }

            return false;
        }
 internal static Attribute[] GetCustomAttributes(RuntimeType type, RuntimeType caType, bool includeSecCa, out int count)
 {
     count = 0;
     bool flag = (caType == ((RuntimeType) typeof(object))) || (caType == ((RuntimeType) typeof(Attribute)));
     if ((!flag && (s_pca.GetValueOrDefault(caType) == null)) && !IsSecurityAttribute(caType))
     {
         return new Attribute[0];
     }
     List<Attribute> list = new List<Attribute>();
     Attribute item = null;
     if (flag || (caType == ((RuntimeType) typeof(SerializableAttribute))))
     {
         item = SerializableAttribute.GetCustomAttribute(type);
         if (item != null)
         {
             list.Add(item);
         }
     }
     if (flag || (caType == ((RuntimeType) typeof(ComImportAttribute))))
     {
         item = ComImportAttribute.GetCustomAttribute(type);
         if (item != null)
         {
             list.Add(item);
         }
     }
     if ((includeSecCa && (flag || IsSecurityAttribute(caType))) && (!type.IsGenericParameter && (type.GetElementType() == null)))
     {
         object[] objArray;
         if (type.IsGenericType)
         {
             type = (RuntimeType) type.GetGenericTypeDefinition();
         }
         GetSecurityAttributes(type.Module.ModuleHandle.GetRuntimeModule(), type.MetadataToken, false, out objArray);
         if (objArray != null)
         {
             foreach (object obj2 in objArray)
             {
                 if ((caType == obj2.GetType()) || obj2.GetType().IsSubclassOf(caType))
                 {
                     list.Add((Attribute) obj2);
                 }
             }
         }
     }
     count = list.Count;
     return list.ToArray();
 }