10

我有一个类可以处理我正在处理的应用程序中的所有 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 和响应代码的元组,有没有更好的方法来做到这一点?

4

2 回答 2

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 };
    }
于 2013-08-08T07:46:05.330 回答
8

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

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

类型是Tuple<int, string>

或者你可以用一个数组模拟out/ ref......如果你向方法传递一个元素的数组,就像传递一个ref或一个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;
}

或者使用复杂的对象...

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

完毕...

于 2013-08-08T07:44:22.553 回答