我有一个包含大量泛型和 IoC 的应用程序。我有一个这样的界面:
public interface IRepository<TType, TKeyType> : IRepo
然后我对 IRepository 的不同实现进行了一系列测试。许多对象都依赖于其他对象,因此为了测试的目的,我只想获取一个有效的对象。我可以为每个方法定义一个单独的方法:
public static EmailType GetEmailType()
{
return ContainerManager.Container.Resolve<IEmailTypeRepository>().GetList().FirstOrDefault();
}
但我想让这个通用,这样它就可以用来从它使用的存储库中获取任何对象。我这样定义:
public static R GetItem<T, R>() where T : IRepository<R, int>
{
return ContainerManager.Container.Resolve<T>().GetList().FirstOrDefault();
}
这对于使用整数作为键的实现来说效果很好。但我也有使用字符串的存储库。所以,我现在这样做:
public static R GetItem<T, R, W>() where T : IRepository<R, W>
这很好用。但我想将 'W' 限制为 int 或 string。有办法做到这一点吗?
最简单的问题是,我可以将泛型参数限制为多种类型之一吗?
最佳答案
没有;您不能将泛型参数限制为多种类型之一。实际上,通用约束是非常简单的构造。
而且我认为您可能很快就会遇到这样一个事实:通用约束不参与重载决策。 :(
关于C# 多重约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874810/