C# 将列表返回到函数

C# 将列表返回到函数,c#,android,xamarin,C#,Android,Xamarin,这是我的密码。我正在使用该函数检索列表,但它没有发送列表 public List<string> country_set() { mCountryUrl = new Uri ("http://xxxxxxx.wwww/restservice/country"); mList = new List<string> (); mCountry = new List<Country> (); WebClient client =

这是我的密码。我正在使用该函数检索列表,但它没有发送列表

public List<string> country_set()   
{
    mCountryUrl = new Uri ("http://xxxxxxx.wwww/restservice/country");
    mList = new List<string> ();
    mCountry = new List<Country> ();
    WebClient client = new WebClient ();
    client.DownloadDataAsync (mCountryUrl);
    client.DownloadDataCompleted += (sender, e) => {
        RunOnUiThread (() => {
            string json = Encoding.UTF8.GetString (e.Result);
            mCountry = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Country>> (json);
            Console.WriteLine (mCountry.Count.ToString());
            int x = mCountry.Count;
            for(int i=0; i< x ; i++)
            {
                mList.Add(mCountry[i].name);
            }
        });
    };
    return mList;
}
公共列表国家/地区集()
{
mCountryUrl=新Uri(“http://xxxxxxx.wwww/restservice/country");
mList=新列表();
mccountry=新列表();
WebClient客户端=新的WebClient();
client.DownloadDataAsync(mCountryUrl);
client.DownloadDataCompleted+=(发件人,e)=>{
RunOnUiThread(()=>{
string json=Encoding.UTF8.GetString(e.Result);
McCountry=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
Console.WriteLine(mccountry.Count.ToString());
int x=mccountry.Count;
对于(int i=0;i
它抛出一个异常。
请帮助我解决问题。问题是,在方法完成后,即对web服务器的调用完成之前,您立即返回mList。现在,在您的调用代码检查列表后发现它是空的,最终对服务器的调用将完成,并且您的列表将被填充,这太晚了

这将解决问题:

        var mCountryUrl = new Uri("http://xxxxxxx.wwww/restservice/country");
        var mList = new List<string>();
        var mCountry = new List<Country>();
        WebClient client = new WebClient();
        var data = client.DownloadData(mCountryUrl);

        string json = Encoding.UTF8.GetString(data);
        mCountry = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Country>>(json);
        Console.WriteLine(mCountry.Count.ToString());
        int x = mCountry.Count;
        for (int i = 0; i < x; i++)
        {
            mList.Add(mCountry[i].name);

        }

        return mList;
var mCountryUrl=新Uri(“http://xxxxxxx.wwww/restservice/country");
var mList=新列表();
var mccountry=新列表();
WebClient客户端=新的WebClient();
var data=client.DownloadData(mCountryUrl);
string json=Encoding.UTF8.GetString(数据);
mccountry=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
Console.WriteLine(mccountry.Count.ToString());
int x=mccountry.Count;
对于(int i=0;i
这个怎么样:

public async Task<List<string>> country_set() 
{ 
    mCountryUrl = new Uri ("http://xxxxxxx.wwww/restservice/country");
    mList = new List<string>(); 
    mCountry = new List<Country>();
    WebClient client = new WebClient();
    byte[] data = await client.DownloadDataTaskAsync(mCountryUrl); 
    string json = Encoding.UTF8.GetString(data); 
    mCountry = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Country>> (json);
    Console.WriteLine (mCountry.Count.ToString()); 
    int x = mCountry.Count; 
    for(int i=0; i<x; i++)        
        mList.Add(mCountry[i].name);         

    return mList; 
}
公共异步任务国家/地区\u集()
{ 
mCountryUrl=新Uri(“http://xxxxxxx.wwww/restservice/country");
mList=新列表();
mccountry=新列表();
WebClient客户端=新的WebClient();
byte[]data=wait client.downloaddatatasksync(mCountryUrl);
string json=Encoding.UTF8.GetString(数据);
McCountry=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
Console.WriteLine(mccountry.Count.ToString());
int x=mccountry.Count;

对于(int i=0;i您得到了哪个异常?是哪一行引发了该异常?除非是android的设计模式,否则它似乎怀疑您返回了一个包含0个元素的列表,并调度一个线程将项目添加到该列表中(这也不是线程安全的)。这并不像海报的版本那样异步(正在尝试)。我只是想向他们展示如何更正代码和返回数据。在您的回答中,您已经以异步方式正确地实现了它。