具有多个约束的通用方法


251

我有一个具有两个通用参数的通用方法。我试图编译下面的代码,但是它不起作用。是.NET的限制吗?是否可能对不同的参数具有多个约束?

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, TResponse : MyOtherClass

Answers:


402

可以这样做,只是语法有些错误。您需要where为每个约束而不是用逗号分隔约束:

public TResponse Call<TResponse, TRequest>(TRequest request)
    where TRequest : MyClass
    where TResponse : MyOtherClass

8

除了@LukeH提供的主要答案以及其他用法外,我们还可以使用多个接口代替类。(一个类和n个计数接口)像这样

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, IMyOtherClass, IMyAnotherClass

要么

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : IMyClass,IMyOtherClass

1

除了@LukeH的主要回答之外,我还遇到了依赖项注入问题,并且花了一些时间来解决它。对于那些面临相同问题的人,值得分享:

public interface IBaseSupervisor<TEntity, TViewModel> 
    where TEntity : class
    where TViewModel : class

通过这种方式解决。在容器/服务中,关键是typeof和逗号(,)

services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));

这个答案中提到了这一点。


2
这个答案根本与类型约束无关。它涉及未绑定的泛型类型以及如何在C#中将其拼写出来。stackoverflow.com/a/2173115/2157640 stackoverflow.com/a/6607299/2157640
Palec,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.