System.RuntimeTypeHandle.GetCorElementType C# (CSharp) Method

GetCorElementType() private method

private GetCorElementType ( ) : CorElementType
return CorElementType
        internal extern CorElementType GetCorElementType(); 

Usage Example

Example #1
0
        /// <summary>
        /// Retrieves an array of the values of the underlying type constants in a specified enumeration type.
        /// </summary>
        /// <remarks>
        /// This method can be used to get enumeration values when creating an array of the enumeration type is challenging.
        /// For example, <see cref="T:System.Reflection.MetadataLoadContext" /> or on a platform where runtime codegen is not available.
        /// </remarks>
        /// <returns>An array that contains the values of the underlying type constants in enumType.</returns>
        /// <exception cref="ArgumentException">
        /// Thrown when the type is not Enum
        /// </exception>
        public override Array GetEnumValuesAsUnderlyingType()
        {
            if (!IsActualEnum)
            {
                throw new ArgumentException(SR.Arg_MustBeEnum, "enumType");
            }

            // Get all of the values
            ulong[] values = Enum.InternalGetValues(this);

            switch (RuntimeTypeHandle.GetCorElementType(Enum.InternalGetUnderlyingType(this)))
            {
            case CorElementType.ELEMENT_TYPE_U1:
            {
                var ret = new byte[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    ret[i] = (byte)values[i];
                }
                return(ret);
            }

            case CorElementType.ELEMENT_TYPE_U2:
            {
                var ret = new ushort[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    ret[i] = (ushort)values[i];
                }
                return(ret);
            }

            case CorElementType.ELEMENT_TYPE_U4:
            {
                var ret = new uint[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    ret[i] = (uint)values[i];
                }
                return(ret);
            }

            case CorElementType.ELEMENT_TYPE_U8:
            {
                return((Array)values.Clone());
            }

            case CorElementType.ELEMENT_TYPE_I1:
            {
                var ret = new sbyte[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    ret[i] = (sbyte)values[i];
                }
                return(ret);
            }

            case CorElementType.ELEMENT_TYPE_I2:
            {
                var ret = new short[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    ret[i] = (short)values[i];
                }
                return(ret);
            }

            case CorElementType.ELEMENT_TYPE_I4:
            {
                var ret = new int[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    ret[i] = (int)values[i];
                }
                return(ret);
            }

            case CorElementType.ELEMENT_TYPE_I8:
            {
                var ret = new long[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    ret[i] = (long)values[i];
                }
                return(ret);
            }

            default:
                throw new InvalidOperationException(SR.InvalidOperation_UnknownEnumType);
            }
        }
All Usage Examples Of System.RuntimeTypeHandle::GetCorElementType