【问题标题】:C# - generic type with multiple types, includes a type with a type [duplicate]C# - 具有多种类型的泛型类型,包括具有类型的类型[重复]
【发布时间】:2018-06-19 16:18:44
【问题描述】:

我有以下通用类:

public class DomainValidator<TRequest> : IValidator<TRequest> where TRequest : IRequest, IRequest<object>
{
}

如您所见,我为 TRequest 类型指定了两种类型:IRequest 没有类型,IRequest&lt;object&gt; 类型为 any。

如果我在任何地方使用这个 DomainValidator 类,Visual Studio 编译器总是抱怨该类型不能转换为类型 IRequest,因为它有自己的类型参数。

我看过其他类似的问题,但没有一个有类型参数,它有自己的类型。是否有可能做我想要实现的目标?

更新

这是我如何使用这个泛型类以及它失败的地方。

以下类 RequestThatDoesntWorkValidator 不起作用,因为 RequestThatDoesntWork 没有为 IRequest 提供类型,因为它不需要:

public class RequestThatDoesntWorkValidator : DomainValidator<RequestThatDoesntWork>
{

}

public class RequestThatDoesntWork : IRequest
{

}

但是下面的类RequestThatDoesWorkValidator 似乎可以工作,因为RequestThatDoesWorkIRequest 提供了一个类型:

public class RequestThatDoesWorkValidator : DomainValidator<RequestThatDoesWork>
{

}

public class RequestThatDoesWork : IRequest<List<string>>
{

}

我希望这更有意义。

【问题讨论】:

  • 您能否发布一个代码 sn-p 向我们展示哪些内容无法编译?听起来您正在尝试将 DomainValidator 强制转换为 IRequest,这没有任何意义。
  • @JohnWu 请查看我更新的问题。
  • 当您说“我为 TRequest 的类型指定了 2 种类型”时,您希望 TRequest 实现 both 列出的接口,还是 列出的接口?因为您目前所拥有的需要TRequest 来满足both 列出的接口。实际上,您实际上不能说“要求TRequest 实现IRequest IRequest&lt;&gt;”。
  • @AakashM 谢谢,这就是我想要的。我需要一个基本接口。

标签: c# .net generics


【解决方案1】:

您需要将类型参数添加到您自己的类型以作为嵌套参数传递:

public class DomainValidator<TRequest, TInner> : IValidator<TRequest> 
       where TRequest : IRequest, IRequest<TInner>

【讨论】:

  • 请查看我更新的问题。
  • 我不知道你在问什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2019-12-06
  • 2020-08-26
  • 1970-01-01
  • 2015-07-09
  • 2020-03-27
相关资源
最近更新 更多