【发布时间】:2020-10-14 05:33:23
【问题描述】:
我有一堆这样定义的谓词,每个谓词检查不同的 http 状态代码:
readonly Predicate<HttpResponseData> createdHttpStatusPredicate = (HttpResponseData responseData) => {
return responseData.StatusCode == HttpStatusCode.Created;
};
readonly Predicate<HttpResponseData> okHttpStatusPredicate = (HttpResponseData responseData) => {
return responseData.StatusCode == HttpStatusCode.OK;
};
...
我像这样将它们传递到以下方法中(代码已经稍微简化以删除不相关的细节):
public static async Task<HttpResponseData> HttpCaller(HttpMethod requestMethod, Predicate<HttpResponseData> predicate)
{
HttpResponseData response = await SendHttpRequest(requestMethod);
if (predicate(response) == true)
return response;
else
return null;
}
这是一个将一个谓词发送到上述方法的示例调用:
HttpResponseData data = await HttpRequestUtils.HttpCaller(HttpMethod.Post, createdHttpStatusPredicate);
我想知道,我是否可以将所有谓词组合到某个通用谓词中,或者以某种方式指定要在我调用 HttpCaller 时在谓词中查找的 http 状态?
是的,我知道上面的例子没有多大意义,因为我可以直接将我正在寻找的 http 状态传递给 HttpCaller 而无需通过谓词,但在我的情况下,HttpCaller 可以接收我的复杂的谓词也作为输入,基于从哪里调用HttpCaller
【问题讨论】:
-
如果我对问题的理解正确,您有两种情况:1.
HttpCaller被调用,Predicate只检查HttpStatus; 2.HttpCaller以复杂的Predicate调用。我对么?如果我是,为什么不使用两种方法HttpCaller:一种使用预期的HttpStatusarg,另一种使用Predicatearg? -
所以 HttpCaller 方法处理许多不同的场景,因此接受许多不同的谓词,其中一些只测试特定的 http 状态......所以拥有多个方法没有意义做同样的事情
标签: c# functional-programming delegates predicate