在IEntity <t>中找不到通用类型或名称空间名称'T'

时间:2018-10-08 15:16:41

标签: c# entity-framework generics

我有一个接口IEntity声明为

public interface IEntity<T>
{
     T Id { get; set; }
    DateTime Created { get; set; }
    DateTime Updated { get; set; }
    [Timestamp] byte[] RowVersion { get; set; }
    //int Status { get; set; }
}

我需要通过这样的扩展方法传递它

private static bool IsProxy(this IEntity<T> entity)
    {
        if (entity == null)
            throw new ArgumentNullException(nameof(entity));
        var type = entity.GetType();
        return type.BaseType != null && type.BaseType.BaseType != null 
        && type.BaseType.BaseType == typeof(IEntity<T>);
    }

 public static Type GetUnproxiedEntityType(this IEntity<T> entity)
    {
        if (entity == null)
            throw new ArgumentNullException(nameof(entity));

        Type type = null;
        //cachable entity (get the base entity type)
        if (entity is IEntityForCaching)
            type = ((IEntityForCaching)entity).GetType().BaseType;
        //EF proxy
        else if (entity.IsProxy())
            type = entity.GetType().BaseType;
        //not proxied entity
        else
            type = entity.GetType();

        if (type == null)
            throw new Exception("Original entity type cannot be loaded");

        return type;
    }

但是,我收到错误消息

  

CS0246找不到类型或名称空间名称'T'(您是否缺少using指令或程序集引用?)

'T'应该是通用数据类型。

1 个答案:

答案 0 :(得分:0)

您只需要使扩展方法成为通用方法即可。当前不是,所以编译器想知道T是什么。 EG

private static bool IsProxy<T>(this IEntity<T> entity)
{
    if (entity == null)
        throw new ArgumentNullException(nameof(entity));
    var type = entity.GetType();
    return type.BaseType != null && type.BaseType.BaseType != null
    && type.BaseType.BaseType == typeof(IEntity<T>);
}