C# 在非泛型类中生成泛型属性

C# 在非泛型类中生成泛型属性,c#,generics,C#,Generics,我有一个抽象泛型类,如下所示: public abstract class ServicoAbstrato<TEntity, TId> where TEntity : EntidadeBasica<TId> where TId : IEquatable<TId> { protected IDao<TEntity, TId> dao; ... } public abstract class EntidadeBasica<TId

我有一个抽象泛型类,如下所示:

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);
    }
}
公共抽象类servicecobstrato
地点:EntidadeBasica
哪里TId:IEquatable
{
保护爱道道。。。
}
公共抽象类EntidadeBasica
哪里TId:IEquatable
{ ... }
我想在另一个类中有一个泛型类的属性,如下所示:

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);
    }
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
公共类服务属性:HandlerAttribute
{
公共服务助理服务{get;set;}
公共重写ICallHandler CreateHandler(IUnityContainer容器)
{
退回新服务商(servico);
}
}
但它给了我以下错误:

类型“System.type”不能用作泛型类型或方法“Servico.servicobstrato”中的类型参数“TId”。没有从“System.Type”到“System.IEquatable”的隐式引用转换


如何解决此问题?

您正在定义
TId
的地方使用
Type
。和
TId
作为
where
-子句中的限制,因此它必须是
IEquatable
类型

类型
(至少您使用的
类型
)是Microsoft类,不满足该条件

如果您有一个类
equalable
实现了接口
equalable
,您可以使用

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

非常简单,您有一个contstraint
TId:IEquatable
Type
不是
IEquatable
,就像在标记的副本中一样,您尝试用作泛型类型参数的类型没有实现泛型声明需要类型参数实现的接口。