我有一个通用方法,它有两个通用参数。我试图编译下面的代码,但它不起作用。它是.NET限制吗?是否可以为不同的参数设置多个约束?
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, TResponse : MyOtherClass
答案 0 :(得分:363)
可以这样做,你的语法略有错误。每个约束都需要where
,而不是用逗号分隔它们:
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass
where TResponse : MyOtherClass
答案 1 :(得分:1)
除了@LukeH的主要回答外,我还遇到了依赖项注入问题,并且花了一些时间来解决此问题。对于那些面临相同问题的人,值得分享:
public interface IBaseSupervisor<TEntity, TViewModel>
where TEntity : class
where TViewModel : class
以这种方式解决。在容器/服务中,关键是typeof和逗号(,)
services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));
此answer中已提及。
答案 2 :(得分:1)
每个约束都需要在自己的行上,如果单个通用参数有更多约束,则需要用逗号分隔。
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass,
where TResponse : MyOtherClass, IOtherClass
答案 3 :(得分:0)
除了@LukeH的主要答案还有其他用法外,我们还可以使用多个接口代替类。 (一个类和n个计数接口)
public void extractResourceFromJar(String resource, String dstPath) {
File destination = new File(dstPath);
InputStream sourceStream = getClass().getResourceAsStream(resource);
FileUtils.copyInputStreamToFile(sourceStream, destination);
}
或
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, IMyOtherClass, IMyAnotherClass