gpt4 book ai didi

c# - 如何对通用约束进行分组?

转载 作者:行者123 更新时间:2023-11-30 21:52:44 24 4
gpt4 key购买 nike

我正在尝试为泛型方法指定约束 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com