我只有这个简单的泛型类,它应该使用T并创建一个属性。如果我尝试获取此属性但它不存在,则应创建此T类型的新实例并将其返回。这就是我需要在T上设置new()约束的原因。
public class ExternalRepository<T> where T : class, IRepositoryable, new()
{
public IRepositoryable Value
{
get
{
if (RequestCacheManager.GetAt<T>(typeof(T).Name) == null)
RequestCacheManager.SetAt<T>(typeof(T).Name, new T());
return RequestCacheManager.GetAt<T>(typeof(T).Name);
}
}
}
现在我需要创建一个这样的列表。但由于new()约束,它看起来似乎是不可能的。我需要这样的东西:
public static List<ExternalRepository<T>> ExternalRepositories { get; set; } where T : class, IRepositoryable, new()
但这无效。你能帮我解决一下吗?
谢谢。
答案 0 :(得分:1)
你想把ExternalRepository<Person>
和ExternalRepository<Order>
放在一个列表中,对吗?
可悲的是,这不能明确地完成。您必须使用接口或基类。
public interface IExternalRepository
{
// declaration of common properties and methods
}
public class ExternalRepository<T> : IExternalRepository
where T : class, IRepositoryable, new()
{
// implementation of common properties and methods
// own properties and methods
}
public static List<IExternalRepository> ExternalRepositories { get; set; }
或
public class ExternalRepository
{
// shared properties and methods
}
public class ExternalRepository<T> : ExternalRepository
where T : class, IRepositoryable, new()
{
// own properties and methods
}
public static List<ExternalRepository> ExternalRepositories { get; set; }
另请参阅我对this问题的回复。