C# 弥补'的不足;输出';异步方法中的参数。
我有一个类处理我正在处理的应用程序中的所有API事务。其方法的总体轮廓如下所示:C# 弥补'的不足;输出';异步方法中的参数。,c#,.net,windows-store-apps,C#,.net,Windows Store Apps,我有一个类处理我正在处理的应用程序中的所有API事务。其方法的总体轮廓如下所示: public static async Task<bool> APICall(int bla) { HttpResponseMessage response; bool res; // Post/GetAsync to server depending on call + other logic
public static async Task<bool> APICall(int bla)
{
HttpResponseMessage response;
bool res;
// Post/GetAsync to server depending on call + other logic
return res;
}
公共静态异步任务APICall(int-bla)
{
HttpResponseMessage响应;
布尔雷斯;
//Post/GetAsync到服务器,具体取决于调用+其他逻辑
返回res;
}
我想做的是能够将response.StatusCode返回给调用者,但是由于我们不允许在异步方法中使用'out'参数,这会使事情变得复杂一些
我正在考虑返回一个包含bool和响应代码的元组,有更好的方法吗?使用元组
来返回更多的值。例如,要返回int和字符串:
return Tuple.Create(5, "Hello");
类型为Tuple
或者你可以用一个数组来模拟out
/ref
。。。如果将一个元素的数组传递给该方法,就像传递ref
或out
(取决于填充元素的人):
或者使用复杂的对象
class MyReturn
{
public string Text { get; set; }
public int Value { get; set; }
}
MyMethod(new MyReturn());
void MyMethod(MyReturn ret)
{
ret.Text = "Hello";
ret.Value = 10;
}
完成
我在考虑返回一个包含bool和响应代码的元组,有更好的方法吗
您可以创建一个特定的类来保存结果。就我个人而言,我并不真正喜欢元组,因为像Item1
或Item2
这样的名称并没有说明值
class APICallResult
{
public bool Success { get; set; }
public HttpStatusCode StatusCode { get; set; }
}
public static async Task<APICallResult> APICall(int bla)
{
HttpResponseMessage response;
bool res;
// Post/GetAsync to server depending on call + other logic
return new APICallResult { Success = res, StatusCode = response.StatusCode };
}
类APICallResult
{
公共bool成功{get;set;}
公共HttpStatusCode状态码{get;set;}
}
公共静态异步任务APICall(int bla)
{
HttpResponseMessage响应;
布尔雷斯;
//Post/GetAsync到服务器,具体取决于调用+其他逻辑
返回新的APICallResult{Success=res,StatusCode=response.StatusCode};
}
为什么不返回HttpResponseMessage
?@技巧,因为我想在方法中包含一些逻辑(解析jason等)。如果要返回HTTP响应的状态码,为什么需要布尔值?返回一个指示请求是否成功的代码后,它有什么用途?@Trickery,因为状态代码将指示bool为何为某个特定值。在大多数通话中,我很高兴阅读bool,对于登录等,我可能想看看它是否返回false,因为设备被列入黑名单,或者用户被列入黑名单等(由状态代码指示)。+1。元组太可怕了。它们不保存返回的信息。+1元组并不可怕,但应在正确的位置使用。而不是linq链中的私有类。谢天谢地,C#7引入了真正的语言级元组(包括名称和所有内容)。现在他们终于棒极了!
class APICallResult
{
public bool Success { get; set; }
public HttpStatusCode StatusCode { get; set; }
}
public static async Task<APICallResult> APICall(int bla)
{
HttpResponseMessage response;
bool res;
// Post/GetAsync to server depending on call + other logic
return new APICallResult { Success = res, StatusCode = response.StatusCode };
}