将多个对象添加到arraylist

时间:2016-01-28 08:04:37

标签: c# model-view-controller arraylist

嗨我有一个方法,我从视图中传递值复选框到控制器。以下是控制器方法。

但是,当我尝试从数据表中复选框2值时,它们都将作为值传递,并且列表将被正确分割,但是当添加到arraylist时,只会发送最后一个复选框。我的第一个值将被最后一个覆盖,但我的计数将保持不变。

任何帮助都将不胜感激,请随时与我轻松相处。

#include <iostream>
#define MAX 1000
int main()
{
int i;

for(i=1; i<= MAX; i= i<<1)
    {
    std::cout<<i <<" ";
    }   

for(i=1; i<= MAX; i= i*2)
    {
    std::cout<<i <<" ";
    }

return 0;
}

2 个答案:

答案 0 :(得分:0)

什么是s?您没有在任何地方声明它,并且在每个循环中继续使用相同的变量引用来更改值而不是引用。

当然,你的arraylist充满了相同的对象,你最终会在添加到ArrayList的所有项目中获得相同值的副本。

您需要声明变量 s 以获取要添加到ArrayList的确切类型,然后在每个循环中使用 new 对其进行初始化。

无论如何,使用List<T>代替无类型ArrayList会好得多

public virtual ActionResult value(string value)
{
    List<YourClassName> arr = new List<YourClassName>();
    if(string.IsNullOrEmpty(value)
       return View(arr);

    var list = value.Split('#');
    // Not needed 
    // if (list != null )
    // {
    //    for (int i = 0; i < list.Length; i++)
    //    {
            foreach (var key in list)
            {
                // In every loop create a new instance of s of the 
                // exact type for your class 
                YourClassName s = new YourClassName();

                if (string.IsNullOrWhiteSpace(key))
                    continue;

                s.NRIC = key.Split('|')[0];
                s.DOB = Convert.ToDateTime(key.Split('|')[1];);

                arr.Add(s);
            }
    //    }
    // }
    return View(arr);
}

我不是MVC的专家,我想这个代码在你的Controller中,你想要返回一个通用列表explained in this question。随意评论/修复返回类型的不精确代码。

答案 1 :(得分:0)

每次进行循环时,

s都需要成为一个新对象。

foreach (var key in list)
{
   // ...
   var s = new MyObject();  // create new object

   s.NRIC = nric;
   s.DOB = Convert.ToDateTime(dob);

   arr.Add(s);
}

因为如果没有,您将在每次执行arr.Add(s)时添加对同一对象的引用。因此,更改此引用对象s.NRIC = nric;的值会影响arr的所有项目,因为每个项目都指向同一个对象。

此外,似乎您的for loop是多余的,因为foreach执行相同的工作,遍历数组list