不支持通用类型 System.Guid
Generic type not supported System.Guid
我想为 Id 属性 类型提供指导,但它不起作用。
是转换错误。
我该怎么做?
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>
{
}
我猜你正试图在 Notification
的 class 签名中使用的任何 object
和 Guid
(其中是您在 INotificationRepository
的签名中指定的 struct
)。您要么必须在两个地方都使用 Guid
,要么在两个地方都使用相同类型或存在隐式转换的 object
。
IRepository
的接口签名强制了这个条件。
只要 Notification
派生自 EntityBase<Guid>
就没有转换错误。
public class Notification : EntityBase<Guid>
{
}
但是,如果您在不修改 INotificationRepository
的定义的情况下尝试将引用类型用作 TKey
,则会出现引用类型转换错误
public class Notification : EntityBase<object>
{
}
The type 'Notification' cannot be used as type parameter 'TEntity' in the generic type or method 'IRepository'. There is no implicit reference conversion from 'Notification' to 'EntityBase'.
我想为 Id 属性 类型提供指导,但它不起作用。 是转换错误。 我该怎么做?
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>
{
}
我猜你正试图在 Notification
的 class 签名中使用的任何 object
和 Guid
(其中是您在 INotificationRepository
的签名中指定的 struct
)。您要么必须在两个地方都使用 Guid
,要么在两个地方都使用相同类型或存在隐式转换的 object
。
IRepository
的接口签名强制了这个条件。
只要 Notification
派生自 EntityBase<Guid>
就没有转换错误。
public class Notification : EntityBase<Guid>
{
}
但是,如果您在不修改 INotificationRepository
TKey
,则会出现引用类型转换错误
public class Notification : EntityBase<object>
{
}
The type 'Notification' cannot be used as type parameter 'TEntity' in the generic type or method 'IRepository'. There is no implicit reference conversion from 'Notification' to 'EntityBase'.