我有一种情况让我感到困惑,希望能得到一些帮助。在下面的代码中,FindById 方法无需强制转换即可工作,但 UpdatedAuditedEntity 调用不会。注意:
- AuditedEntity 派生自 Entity
- 将 auditedEntity 转换为 Entity 不起作用,仅转换为 T 有效。
对我在这里缺少的任何见解将不胜感激。起初我认为这与方差有关,但正如我上面提到的,我尝试向下投射但没有成功。
public class NHibernateRepository<T> : NHibernateBase,
IRepository<T> where T : Entity
{
public IEnumerable<T> FindAll(Expression<Func<T, bool>> predicate)
{
var query = GetQuery(predicate);
return Transact(() => query.ToList());
}
public T FindById(int id)
{
// TODO: Why does this work when below doesn't
return FindAll(e => e.Id == id).FirstOrDefault();
}
private T UpdateAuditedEntity(T item)
{
var auditedEntity = item as AuditedEntity;
if (auditedEntity == null) return item;
auditedEntity.DateModified = DateTime.UtcNow;
// TODO: figure out why this cast is necessary
return auditedEntity as T;
}