我想指导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>
{
}
答案 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;。