Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 维护泛型类型集合引用的最佳方法_C#_Generics - Fatal编程技术网

C# 维护泛型类型集合引用的最佳方法

C# 维护泛型类型集合引用的最佳方法,c#,generics,C#,Generics,假设我有这个界面: public interface IRepository<T> where T : Entity { T Get(string query); void Save(T entity); } 公共接口i假设,其中T:Entity { T Get(字符串查询); 无效保存(T实体); } 我有几个具体的类,比如(其中,用户和项目,当然,从实体继承): 公共类用户存储库:IRepository{…} 公共类ProjectRepository:IProject

假设我有这个界面:

public interface IRepository<T> where T : Entity
{
  T Get(string query);
  void Save(T entity);
}
公共接口i假设,其中T:Entity
{
T Get(字符串查询);
无效保存(T实体);
}
我有几个具体的类,比如(其中,用户和项目,当然,从实体继承):

公共类用户存储库:IRepository{…}
公共类ProjectRepository:IProjectRepository{…}
保存对单个集合中所有这些内容的引用的最佳方式是什么?很明显,你不能有这样的东西:

var repos = new IRepository<Entity>[]
{
  new UserRepository(),
  new ProjectRepository()
}
var repos=new-IRepository[]
{
新建UserRepository(),
新项目存储库()
}
那么我必须有一个非泛型接口,泛型接口从中继承吗

public interface IRepository
{
  Entity Get(string query);
  void Save(Entity entity);
}

public interface IRepository<T> : IRepository { ... }
公共接口IRepository
{
实体获取(字符串查询);
作废保存(实体);
}
公共接口IRepository:IRepository{…}
谢谢你的帮助、想法和建议

那么我必须有一个非泛型接口,泛型接口从中继承吗

public interface IRepository
{
  Entity Get(string query);
  void Save(Entity entity);
}

public interface IRepository<T> : IRepository { ... }
对。如果你能成功的话,你可以在非泛型接口上放更少的方法:这取决于你想做多少类型转换。(例如,您可以将它们放在
对象[]
中。)

您的
IRepository
界面实际上不适合协变或逆变,因为
t
同时出现在输入和输出位置。正如您所指出的,您在这里所能做的最好的事情就是提供一个非通用接口


当然,您可以使用
object
存储对任何类型的引用,但我猜您正在寻找比这更安全的类型。

是的,我在对象集合中处理这一切,是的,确实想要一种更安全的类型方式。另外,很高兴我问了,我将不得不仔细阅读ISomeInterface的含义:谢谢你的提示。