简体   繁体   中英

creating a custom list windows phone 8.1

here is the code adding data to the list, after which i return the list. Problem is that the last set of data seems to be overwriting everything else in the list

           for (int k=0; k < jsonObject["mydetails"].GetArray().Count; k++)
                {

                    //add the corresponding data from the sample array
                    obj.accountNumber = jsonObject["mydetails"].GetArray()[k].GetObject()["id"].GetString();
                    obj.accountName = jsonObject["mydetails"].GetArray()[k].GetObject()["name"].GetString();
                    obj.accountBall = jsonObject["mydetails"].GetArray()[k].GetObject()["age"].GetString();
                    mylist.Add(obj);
                }

You always add the same object obj to the list. You need to create a new in the top of the loop.

       for (int k=0; k < jsonObject["mydetails"].GetArray().Count; k++)
            { 
                obj = new ObjectType(); // you know better the type of the object you want to create. 

                //add the corresponding data from the sample array
                obj.accountNumber = jsonObject["mydetails"].GetArray()[k].GetObject()["id"].GetString();
                obj.accountName = jsonObject["mydetails"].GetArray()[k].GetObject()["name"].GetString();
                obj.accountBall = jsonObject["mydetails"].GetArray()[k].GetObject()["age"].GetString();
                mylist.Add(obj);
            }

Without the the line obj = new ... you change the properties accountNumber , accountName and accountBall of the same object instance. At the end you add always that object reference to the list. So it seems that the last run of the loop changes all objects.

Your code isn't adding any new objects to the list, it modifies and adds the same object. In the end, the list contains X references to the same object instance.

In general it is consider bad practice to declare a variable outside the scope in which it is used. You could have avoided this problem by writing:

var myArray=jsonObject["mydetails"].GetArray();
for (int k=0; k < myArray.Count; k++)
{
    var myJsonObject=myArray[k].GetObject();
    var obj=new MyAccountObject();        
    obj.accountNumber = myJsonObject["id"].GetString();
    ...
 }

Notice that instead of calling GetArray() and GetObject() in each line (essentially doing the job of extracting the array multiple times) I stored them in separate variables. This will result in far less CPU and memory usage.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM