我有一个接口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'应该是通用数据类型。
答案 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>);
}