Есть много сущностей, которые наследуются от класса BaseEntity<TKey>. Операции, которые необходимо проводить над сущностями, абсолютно одинаковые, по этому был создан класс DataService<TEntity, TKey> where TEntity: BaseEntity<TKey>. В методах класса возникает ошибка при использовании ключа:
Это один и тот же тип, но компилятор этого признавать не хочет. Как это исправить?
Пример кода, приводящего к ошибке:
public Task<BaseEntity<TKey>> Get(TKey id)
{
return DataService.FirstOrDefaultAsync(u => u.Id == id);
}
Ограничения where TKey : IComparable, IEquatable<TKey> ошибку не исправляют
Компилятор признает, что это один и тот же тип. Он говорит, что у этого типа может не быть оператора ==.
Ты можешь использовать вместо него метод Equals, который должен быть переопределён у всех типов, у которых есть переопределение оператора ==.
Если речь о ссылочных типах, и необходимо сравнение по ссылке ReferenceEquals. Так же вы можете добавить ограничение для TKey - IComparable или IEquatable и использовать методы этих интерфейсов для сравнения.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости