Общий тип не поддерживается System.Guid - PullRequest
0 голосов
/ 14 мая 2018

Я хочу указать тип 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>
{     

}

1 Ответ

0 голосов
/ 19 мая 2018

Я предполагаю, что вы пытаетесь неявно преобразовать между object, который вы использовали в сигнатуре класса Notification, и Guid (который является struct), который вы указали в подпись INotificationRepository. Вы должны либо использовать Guid в обоих местах, либо в обоих местах использовать object того же типа или там, где существует неявное преобразование.

Сигнатура интерфейса IRepository форсирует это условие.

Пока Notification выводится из EntityBase<Guid>, ошибки преобразования нет.

public class Notification : EntityBase<Guid>
{

}

Однако ошибка преобразования ссылочного типа появится, если вы попытаетесь использовать ссылочный тип как TKey без изменения определения INotificationRepository

public class Notification : EntityBase<object>
{

}

Тип «Уведомление» нельзя использовать в качестве параметра типа «TEntity» в универсальном типе или методе «IRepository». Не существует неявного преобразования ссылок из «Уведомления» в «EntityBase».

...