перенести переменную, объявленную внутри задачи asyn c, в другой класс - PullRequest
0 голосов
/ 24 апреля 2020

Я вытащил некоторую информацию, используя newtonsoft. json и HttpClient:

public class Main {
    static async Task Main() {
        using(var client = new HttpClient() {
            url = "webapilink goes here";
            var response = await client.GetStringAsync(url);
            apiStuff(the class i used to match the JSON format) variableName = 
                  JsonConvert.DeserializeObject<apiStuff>(response);
        }
    }
}

Я хочу получить переменную "variableName" для отдельного класса, и, по моему мнению, не могу понять это вне. Я получаю сообщение об ошибке при попытке использовать его где-либо за пределами HttpClient.

1 Ответ

0 голосов
/ 24 апреля 2020

Как написано, ваш асин c метод вернул бы void, если бы он не был асин c. Но его можно переписать так, чтобы он возвращал экземпляр apiStuff, чтобы другие методы (и другие классы) могли получить этот экземпляр apiStuff и использовать его:

using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;

public class MainClass
{
    public static async Task<apiStuff> Main()
    {
        using (var client = new HttpClient())
        {
            string url = "webapilink goes here";
            var response = await client.GetStringAsync(url);
            apiStuff variableName =
                  JsonConvert.DeserializeObject<apiStuff>(response);
            return variableName;
        }
    }
}

public class SecondClass
{
    public static async Task GetApiStuff()
    {
        apiStuff variableName = await MainClass.Main();
        // do more work with variableName
    }
}

public class apiStuff { /* defined elsewhere */ }

Если это не то, что Вы спрашивали о, пожалуйста, уточните в исходном вопросе. (И я предполагаю, что метод на самом деле не назван Main - это может сбить с толку.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...