补偿异步方法中缺少'out'参数。

时间:2013-08-08 07:40:56

标签: 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
            return res;
        }

我想要做的是能够将response.StatusCode返回给调用者,但由于我们不允许在异步方法中使用'out'参数,因此会使事情变得复杂。

我在考虑返回一个包含bool和响应代码的元组,有更好的方法吗?

2 个答案:

答案 0 :(得分:11)

  

我在考虑返回一个包含bool和响应代码的元组,有更好的方法吗?

您可以创建一个特定的类来保存结果。就个人而言,我并不喜欢元组,因为像Item1Item2这样的名字对价值观一无所知。

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

答案 1 :(得分:8)

使用Tuple<x, y>返回多个值。例如,要返回一个int和一个字符串:

return Tuple.Create(5, "Hello");

,类型为Tuple<int, string>

或者您可以使用数组模拟out / ref ...如果您将方法传递给一个元素的数组,就像传递ref或{{1 (取决于谁应该填充元素):

out

或使用复杂的物体......

MyMethod(new int[1] { 6 });

void MyMethod(int[] fakeArray)
{
    if (fakeArray == null || fakeArray.Length != 1)
    {
        throw new ArgumentException("fakeArray");
    }

    // as a `ref`
    fakeArray[0] = fakeArray[0] + 1;

    // as an `out`
    fakeArray[0] = 10;
}

完成...