xamarin表单不能隐式转换类型system.threading.tasks.task <system.collections.generic list =“”to =“”system.collections.generic =“”list =“”

时间:2016-11-16 04:14:21

标签: c# generics asynchronous visual-studio-2015 xamarin.forms

=”“

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

这是我的 App.cs

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

The error that was shown 谢谢!

1 个答案:

答案 0 :(得分:1)

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

public List<MenuItemModel> getBeverageList()

之后,你应该停留几天,并了解async / await和TPL ......