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)); }
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); }