可以在泛型类型约束上指定它必须实现泛型类型吗?

时间:2011-03-16 15:51:34

标签: c# .net generics type-constraints

以下是我想做的事情:

public interface IRepository<TSet<TElement>> where TSet<TElement> : IEnumerable<TElement>
{
    TSet<TEntity> GetSet<TEntity>();
}

这种构造在.NET中是否可行?

修改:问题不够明确。这是我想要做的,扩展:

public class DbRepository : IRepository<DbSet<TElement>> {
    DbSet<TEntity> GetSet<TEntity>();
}

public class ObjectRepository : IRepository<ObjectSet<TElement>> {
    ObjectSet<TEntity> GetSet<TEntity>();
}

意思是,我想要约束类型:   - 接受单个通用参数   - 实现给定的单个通用参数接口。

这可能吗?事实上,我只会对第一件事感到满意。

public interface IRepository<TGeneric<TElement>> {
    TGeneric<TArgument> GetThing<TArgument>();
}

2 个答案:

答案 0 :(得分:5)

您需要使用两种通用类型来实现此目的,例如:

public interface IRepository<TCollection, TItem> where TCollection : IEnumerable<TItem>
{
    TCollection GetSet<TItem>();  
}

(我假设TEntity原来应该是TElement ...)

话虽如此,最有可能写出类似的东西:

public interface IRepository<T>
{
    IEnumerable<T> GetSet<T>();  
}

这将是实现上述目标的更常用手段。

答案 1 :(得分:0)

最后,这似乎不可能。

我最终通过定义自己的界面来解决这个问题:

公共接口IRepository {     IMySet GetSet(); }

我将DbSetObjectSet包装在实现这些接口的对象中。