通用类型不支持System.Guid

时间:2018-05-14 20:40:49

标签: c# generics inheritance guid

我想指导Id Property的类型,但它不起作用。 它的转换错误。 我怎么能这样做?

public interface IEntity<TKey>
{
    TKey Id { get; set; }
}

继承EntityBase

public abstract class EntityBase<TKey> : IEntity<TKey>
{
    public TKey Id { get; set; }
}

继承IRepository

public interface IRepository<TEntity, TKey> where TEntity : EntityBase<TKey>
{
    void Add(TEntity entity);

    void Delete(TKey key);

    void Update(TEntity entity);

    TEntity Find(TKey key);

    TEntity Find(Expression<Func<TEntity, bool>> lambda);

    IEnumerable<TEntity> WhereSelect(Expression<Func<TEntity, bool>> lambda = null);
}

继承IRepository

public interface INotificationRepository:IRepository<Notification,Guid>
{     

}

1 个答案:

答案 0 :(得分:0)

我猜你是否试图在object的班级签名和Notification中使用的Guid之间隐式转换。 struct)您已在INotificationRepository的签名中指定。您必须在两个地方都使用Guid,或者在两个地方都使用相同类型的object或存在隐式转化的地方。

IRepository的界面签名会强制这种情况。

只要Notification来自EntityBase<Guid>,就没有转换错误。

public class Notification : EntityBase<Guid>
{

}

但是,如果您尝试将引用类型用作TKey而不修改INotificationRepository

的定义,则会出现引用类型转换错误
public class Notification : EntityBase<object>
{

}
  

类型&#39;通知&#39;不能用作类型参数&#39; TEntity&#39;在通用类型或方法&#39; IRepository&#39;。来自&#39;通知&#39;没有隐式参考转换。到&#39; EntityBase&#39;。