使通用性质的非通用类
问题描述:
我有一个抽象的泛型类是这样的:使通用性质的非通用类
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'
我该如何解决这个问题?
答
您在定义TId
的地方使用Type
。并且TId
作为where
条款中的限制,因此它必须是IEquatable<TId>
。
Type
(至少您使用的是Type
)是Microsoft类,不符合该条件。
如果你有一个类Equatable<T>
某处它实现了接口IEquatable<T>
,你可以使用
public ServicoAbstrato<EntidadeBasica<Type>, Equatable<Type>> servico { get; set; }
很简单,你有一个contstraint'TID:IEquatable'和'Type'不是'IEquatable ' –
Jonesopolis
就像在标记的副本中一样,您试图用作泛型类型参数的类型不会实现接口,您的泛型声明需要实现的类型参数。 –