public static string LowLevelToString(this RuntimeTypeHandle rtth)
        {
            TypeReferenceHandle typeRefHandle;
            QTypeDefinition     qTypeDefinition;
            MetadataReader      reader;

            // Try to get the name from metadata
            if (TypeLoaderEnvironment.Instance.TryGetMetadataForNamedType(rtth, out qTypeDefinition))
            {
#if ECMA_METADATA_SUPPORT
                string result = EcmaMetadataFullName(qTypeDefinition);
                if (result != null)
                {
                    return(result);
                }
#endif

                reader = qTypeDefinition.NativeFormatReader;
                TypeDefinitionHandle typeDefHandle = qTypeDefinition.NativeFormatHandle;
                return(typeDefHandle.GetFullName(reader));
            }

            // Try to get the name from diagnostic metadata
            if (TypeLoaderEnvironment.TryGetTypeReferenceForNamedType(rtth, out reader, out typeRefHandle))
            {
                return(typeRefHandle.GetFullName(reader));
            }

            // Fallback implementation when no metadata available
            return(LowLevelToStringRawEETypeAddress(rtth));
        }
        public static string LowLevelToString(this RuntimeTypeHandle rtth)
        {
            MetadataReader       reader;
            TypeDefinitionHandle typeDefHandle;
            TypeReferenceHandle  typeRefHandle;

            // Try to get the name from metadata
            if (TypeLoaderEnvironment.Instance.TryGetMetadataForNamedType(rtth, out reader, out typeDefHandle))
            {
                return(typeDefHandle.GetFullName(reader));
            }

            // Try to get the name from diagnostic metadata
            if (TypeLoaderEnvironment.TryGetTypeReferenceForNamedType(rtth, out reader, out typeRefHandle))
            {
                return(typeRefHandle.GetFullName(reader));
            }

            // Fallback implementation when no metadata available
            string prefix = "EEType:0x";

            StringBuilder sb  = new StringBuilder(prefix.Length + IntPtr.Size * 4);
            ulong         num = (ulong)rtth.ToIntPtr();

            int shift = IntPtr.Size * 8;

            while (shift > 0)
            {
                shift -= 4;
                int digit = (int)((num >> shift) & 0xF);
                sb.Append(HexDigits[digit]);
            }

            return(sb.ToString());
        }