在非泛型类中创建泛型属性

时间:2017-04-03 19:10:05

标签: 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>
  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);
    }
}

但是它给了我以下错误:

  

类型'System.Type'不能用作泛型类型或方法'Servico.ServicoAbstrato'中的类型参数'TId'。没有从'System.Type'到'System.IEquatable'

的隐式引用转换

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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

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

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

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