C# 弥补'的不足;输出';异步方法中的参数。

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

我有一个类处理我正在处理的应用程序中的所有API事务。其方法的总体轮廓如下所示:

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 };
    }