Co oznacza typ T musi być typem referencyjnym, aby można go było używać jako parametru?

Co oznacza typ T musi być typem referencyjnym, aby można go było używać jako parametru?

Jeśli spojrzysz na definicję Db<TEntity> :

public class DbSet<TEntity> : DbQuery<TEntity>, IDbSet<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>, IQueryable, IEnumerable, IInternalSetAdapter 
where TEntity : class

Ponieważ ma type constraint że typem ogólnym musi być class musisz zainicjować go typem, który również pasuje do tego warunku:

public class GenericRecordController<T> : Controller where T : class
{ ... }

Najwyraźniej mają ograniczenia dotyczące typu ogólnego.

Wszystko, co musisz zmienić, to:

public class GenericRecordController<T> : Controller where T : class

To mówi kompilatorowi, że tylko typy referencyjne mogą być dostarczane jako typ dla T.


Możesz to zrobić również za pomocą jednej metody:

        public bool HasKey<T>(T obj) where T : class
        {
            return _db.Entry<T>(obj).IsKeySet;
        }