コード例 #1
0
        public EntityHandle GetTypeHandle(Type type)
        {
            if (type.IsGenericType && !type.IsGenericTypeDefinition)
            {
                var typeSpecEncoder = new BlobEncoder(new BlobBuilder()).TypeSpecificationSignature();
                typeSpecEncoder.FromSystemType(type, this);
                return(Builder.AddTypeSpecification(GetOrAddBlob(typeSpecEncoder.Builder)));
            }

            if (TryGetTypeDefinition(type, out var metadata))
            {
                return(metadata.Handle);
            }

            if (IsReferencedType(type))
            {
                return(ResolveTypeReference(type));
            }

            throw new ArgumentException($"Type cannot be found: {MetadataHelper.GetFriendlyName(type)}", nameof(type));
        }
コード例 #2
0
        private EntityHandle ResolveGenericTypeSpec(Type type)
        {
            if (!IsGenericTypeSpec(type))
            {
                throw new ArgumentException($"Generic type spec is expected: {MetadataHelper.GetFriendlyName(type)}",
                                            nameof(type));
            }

            if (_typeSpecHandles.TryGetValue(type, out var typeSpec))
            {
                return(typeSpec);
            }

            var typeSpecEncoder = new BlobEncoder(new BlobBuilder()).TypeSpecificationSignature();

            typeSpecEncoder.FromSystemType(type, this);
            var typeSpecHandle = Builder.AddTypeSpecification(GetOrAddBlob(typeSpecEncoder.Builder));

            _typeSpecHandles.Add(type, typeSpecHandle);

            return(typeSpecHandle);
        }