У меня есть следующие обобщенные c классы:
public class Entity<Key>
{
public Key ID;
}
public interface IEntity<T>
{
T ID { get; set; }
}
public class GenericRepo<TEntity,CEntity,Key>
where TEntity : class, IEntity<Key>
where CEntity : class, IEntity<Key>
{
protected readonly DataContext _context;
protected readonly IMapper _mapper;
public GenericRepo(DataContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public CEntity GetByID(Key id)
{
//here i get operators == cannot be applied to operands of type 'Key' and 'Key'
TEntity dbEntity = _context.Set<TEntity>().FirstOrDefault(e => e.ID == id);
if (dbEntity == null)
{
return null;
}
return _mapper.Map<CEntity>(dbEntity);
}
}
Я пытаюсь передать универсальный c тип Key
в свойство ID
. Я получаю operators == cannot be applied to operands of type 'Key' and 'Key'
, когда использую ==
для переданного параметра и свойства Set, которое также имеет тип Key
, поскольку они имеют одинаковый обобщенный c тип Key
, как я могу реализовать равенство на Key
на этих классах?
типы, которые мне нужно передать: int
или string
.
Однако я попытался добавить предложение where
к классу where T : Type
, ошибка операндов удалена, но теперь я не могу передать ни string
, ни int
, как в следующем Entity<int>
я получаю there is no boxing conversion from int to System.Type
.
Я видел некоторые ответы, такие как использование .Equals
и реализация IComparer для классов, но в моем случае это тип, и мне нужно ==
, чтобы использовать его в LINQ для SQL в ef- core.
Есть ли условие where
для добавления в класс, чтобы я мог передать тип своему классу и использовать ==
или любым другим способом?