我正在尝试为泛型方法指定约束 groups,但我不确定这在 C# 中是否可行。如果是,我在弄清楚语法时遇到了麻烦。目前我有以下内容:
public TOut GetResponse<TOut, TIn>(TIn message)
where TOut : BaseMessageResponse
where TIn : BaseMessageRequest
哪个功能非常好。但是我实际上并不发送或接收基类消息,而是派生类。我真正想要的是能够声明组,这样我就可以在编译时判断我是否有不匹配的请求和响应类型。所以我想要的是这样的:
public TOut GetResponse<TOut, TIn>(TIn message)
(where TOut : Derived1Response
where TIn : Derived1Request)
(where TOut : Derived2Response
where TIn : Derived2Request)
这是可以在单个方法定义中完成的事情吗?
还有另一种解决方案,即为每对请求/响应对象定义一个方法,并让每个对象调用我现在拥有的通用泛型方法,如下所示:
public Derived1Response GetResponse(Derived1Request request)
{
return GetResponse<Derived1Response, Derived1Request>(request);
}
public Derived2Response GetResponse(Derived2Request request)
{
return GetResponse<Derived2Response, Derived2Request>(request);
}
然而,这会使代码膨胀,从而违背了使用泛型的初衷。
最佳答案
如果是我,我会将通用定义移到类级别,并为不同的请求/响应类型使用单独的实例。
例如
public myClass<TOut, TIn>
where TOut : BaseMessageResponse
where TIn : BaseMessageRequest
{
public TOut GetResponse(TIn)
{
...
}
}
然后使用:
var derived1Processing = new myClass<Derived1Response, Derived1Request>();
var derived2Processing = new myClass<Derived2Response, Derived2Request>();
关于c# - 如何对通用约束进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34517340/