具有默认构造函数的通用对象列表

时间:2014-02-28 09:05:11

标签: c# list generics constraints

我只有这个简单的泛型类,它应该使用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()

但这无效。你能帮我解决一下吗?

谢谢。

1 个答案:

答案 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问题的回复。