使通用性质的非通用类

问题描述:

我有一个抽象的泛型类是这样的:使通用性质的非通用类

public abstract class ServicoAbstrato<TEntity, TId> 
    where TEntity : EntidadeBasica<TId> 
    where TId : IEquatable<TId> 
{ 
    protected IDao<TEntity, TId> dao; ... 
} 

public abstract class EntidadeBasica<TId> 
    where TId : IEquatable<TId> 
{ ... } 

,我想有这样的泛型类的另一个类这样的特性:

[AttributeUsage(AttributeTargets.Property | AttributeTargets .Field)] 
public class ServicesAttribute : HandlerAttribute 
{ 
    public ServicoAbstrato<EntidadeBasica<Type>, Type> servico { get; set; } 

    public override ICallHandler CreateHandler(IUnityContainer container) 
    { 
     return new ServicesHandler(servico); 
    } 
} 

但它给了我以下错误:

The type 'System.Type' cannot be used as type parameter 'TId' in the generic type or method 'Servico.ServicoAbstrato'. There is no implicit reference conversion from 'System.Type' to 'System.IEquatable'

我该如何解决这个问题?

+1

很简单,你有一个contstraint'TID:IEquatable '和'Type'不是'IEquatable ' – Jonesopolis

+0

就像在标记的副本中一样,您试图用作泛型类型参数的类型不会实现接口,您的泛型声明需要实现的类型参数。 –

您在定义TId的地方使用Type。并且TId作为where条款中的限制,因此它必须是IEquatable<TId>

Type(至少您使用的是Type)是Microsoft类,不符合该条件。

如果你有一个类Equatable<T>某处它实现了接口IEquatable<T>,你可以使用

public ServicoAbstrato<EntidadeBasica<Type>, Equatable<Type>> servico { get; set; }