C# xamarin表单无法隐式转换类型';system.threading.tasks.task<;System.collections.generic列表到System.collections.generic列表

C# xamarin表单无法隐式转换类型';system.threading.tasks.task<;System.collections.generic列表到System.collections.generic列表,c#,generics,asynchronous,visual-studio-2015,xamarin.forms,C#,Generics,Asynchronous,Visual Studio 2015,Xamarin.forms,您好,我是编程新手,但目前我遇到了xamarin forms无法将类型“system.threading.tasks.task>隐式转换为system.collections.generic.List 因为我尝试在启动应用程序时使用全局变量来优化应用程序 当我试图将菜单项列表设置为其他页面将访问的全局变量时,它给了我这个错误。我不知道如何解决这个问题,所以请有人帮助我 这是我的 App.cs private static int globalVariable=1; public static L

您好,我是编程新手,但目前我遇到了xamarin forms无法将类型“system.threading.tasks.task>隐式转换为system.collections.generic.List 因为我尝试在启动应用程序时使用全局变量来优化应用程序 当我试图将菜单项列表设置为其他页面将访问的全局变量时,它给了我这个错误。我不知道如何解决这个问题,所以请有人帮助我

这是我的 App.cs

private static int globalVariable=1;
public static List foodList=new List();
私有静态列表beverageList=新列表();
公共静态整数全局变量
{
获取{return globalVariable;}
设置{globalVariable=value;}
}
公共静态列表食物列表
{
获取{return foodList;}
设置{foodList=value;}
}
公共静态列表
{
获取{return beverageList;}
设置{beverageList=value;}
}
公共应用程序()
{
全局变量=10;
BeverageList=getBeverageList();
FoodList=getFoodList();
}
公共异步任务getBeverageList()
{
康斯坦茨常数=新康斯坦茨();
HttpClient=新的HttpClient();
client.BaseAddress=新Uri(“http://172.20.129.44/");
//为JSON格式添加Accept标头。
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=新的HttpResponseMessage();
response=client.GetAsync(“WebServices/menu.svc/GetBeveragesJSON”).Result;
if(响应。IsSuccessStatusCode)
{
string jsonString=await response.Content.ReadAsStringAsync();
动态dynamicObject=JsonConvert.DeserializeObject(jsonString);
int itemId;
字符串itemName;
字符串itemCategory;
字符串项子类别;
字符串项描述;
字符串项图像;
int itemQuantity;
双项目价格;
字符串itemStatus;
字符串itemAddOn;
for(int i=0;i

谢谢

您没有在
getBeverageList()
中执行任何
async
,因此您可以安全地将其签名更改为

公共列表getBeverageList()

之后,您应该停下来几天,学习async/await和TPL…

您在
getBeverageList()
中没有做任何事情
async
,这样您就可以安全地将其签名更改为

公共列表getBeverageList()
在那之后,你应该停下来几天,首先学习async/await和TPL…

你不应该在一个构造函数中做繁重的工作。第二,您正在调用一个异步方法,但没有等待它。因此,您将获得一项任务。因此,您需要编写
等待getBeverageList()
并将该方法标记为async。但是,构造函数不能是异步的,因此我建议将所有繁重的工作移到一个名为
async void Init()
@Rob的方法中。我尝试将wait放在getBeverageList()前面,但它们会声明此方法不是asyn方法。此外,我无法将App()更改为async。异步void Init()是什么意思?有任何例子吗?有-因为
App()
是一个构造函数。您需要创建一个名为任意名称的新方法,在我的示例中,它名为
Init
。将该方法标记为
Init()
,并将
getBeverageList()
getFoodList()
放在
Init
函数中。当然,在创建了一个新的
应用程序之后,您需要调用
obj.Init()
@Rob sorry仍然听不懂您在说什么。。。你介意把代码写出来作为例子吗?谢谢大家!@Rob抱歉还是不明白你在说什么。。。你介意把代码写出来作为例子吗?非常感谢。公共应用程序(){InitBeverageAndFoodList();}公共异步void InitBeverageAndFoodList(){BeverageList=await getBeverageList();FoodList=await getFoodList();}成功了!首先谢谢你-你不应该在一个建造师里做繁重的工作。第二,您正在调用一个异步方法,但不是aw
private static int globalVariable = 1;
        public static List<MenuItemModel> foodList = new List<MenuItemModel>();
        private static List<MenuItemModel> beverageList = new List<MenuItemModel>();
        public static int GlobalVariable
        {
            get { return globalVariable; }
            set { globalVariable = value; }
        }
        public static List<MenuItemModel> FoodList
        {
            get { return foodList; }
            set { foodList = value; }
        }
        public static List<MenuItemModel> BeverageList
        {
            get { return beverageList; }
            set { beverageList = value; }
        }

        public App()
        {
            GlobalVariable = 10;

            BeverageList = getBeverageList();
            FoodList = getFoodList();
        }
public async Task<List<MenuItemModel>> getBeverageList()
        {
            ConstantCS constant = new ConstantCS();
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://172.20.129.44/");


            // Add an Accept header for JSON format.
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


            HttpResponseMessage response = new HttpResponseMessage();
            response = client.GetAsync("WebServices/menu.svc/GetBeveragesJSON").Result;

            if (response.IsSuccessStatusCode)
            {
                string jsonString = await response.Content.ReadAsStringAsync();
                dynamic dynamicObject = JsonConvert.DeserializeObject(jsonString);

                int itemId_;
                string itemName_;
                string itemCategory_;
                string itemSubCategory_;
                string itemDescription_;
                string itemImage_;
                int itemQuantity_;
                double itemPrice_;
                string itemStatus_;
                string itemAddOn_;

                for (int i = 0; i < dynamicObject.d.Count; i++)
                {
                    itemId_ = dynamicObject.d[i]["itemID"];
                    itemName_ = dynamicObject.d[i]["itemName"].ToString();
                    itemCategory_ = dynamicObject.d[i]["itemCategory"].ToString();
                    itemSubCategory_ = dynamicObject.d[i]["itemSubCategory"].ToString();
                    itemDescription_ = dynamicObject.d[i]["itemDesc"].ToString();
                    itemImage_ = dynamicObject.d[i]["itemImg"].ToString();
                    itemQuantity_ = int.Parse(dynamicObject.d[i]["itemQty"].ToString());
                    itemPrice_ = double.Parse(dynamicObject.d[i]["itemPrice"].ToString());
                    itemStatus_ = dynamicObject.d[i]["itemStatus"].ToString();
                    itemAddOn_ = dynamicObject.d[i]["itemRequest"].ToString();

                    string itemURL_ = constant.PhotoBaseURL + itemImage_;



                    beverageList.Add(new MenuItemModel(itemId_, itemName_, itemCategory_, itemSubCategory_, itemDescription_, itemURL_, itemQuantity_, itemPrice_, itemStatus_, itemAddOn_));
                }

            }
            else
            {
                //Debug.WriteLine("It entered else not if");
            }
            return beverageList;
        }