C# 多重约束

标签 c# generics

我有一个包含大量泛型和 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/

相关文章:

c# - 为什么我的组合框只显示一项?时间:2019-03-17 标签:c#mysql

c# - 使用锁的正确位置在哪里

c# - Unity Application.LoadLevel 卡住安卓设备上的游戏

java - 使用通用方法?

r - 如何使用 roxygen2 正确记录 S4 方法

c# - 如何获取 WinForm 应用程序中最顶层窗体的句柄?

c# - 将项目部分复制到列表的最佳方法?

java - 不存在类型变量 T 的实例,因此 ID 符合 Comparable<? super T>

generics - 具有顺序布局和包大小的值类型的通用列表-> BUG?

Java:尝试使用错误类型作为映射键时出现编译器或 Eclipse 警告