弥补';out';异步方法中的参数

本文关键字:参数 out 弥补 异步方法 | 更新日期: 2023-09-27 18:26:46

我有一个类,它处理我正在处理的应用程序中的所有API事务

public static async Task<bool> APICall(int bla)
        {
            HttpResponseMessage response;
            bool res;
            // Post/GetAsync to server depending on call + other logic
            return res;
        }

我想做的是能够同时返回响应。调用方的StatusCode,但由于我们不允许在异步方法中使用"out"参数,这会使事情稍微复杂一些。

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

弥补';out';异步方法中的参数

我正在考虑返回一个包含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 };
    }

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

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

类型为Tuple<int, string>

或者你可以用一个数组来模拟out/ref。。。如果您向方法传递一个元素的数组,这就像传递refout(取决于谁应该填充元素):

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

完成。。。