将多个对象添加到数组列表

本文关键字:数组 列表 添加 对象 | 更新日期: 2023-09-27 18:32:18

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

但是,

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

任何帮助将不胜感激,请放轻松,因为我是新手。

public virtual actionresult value(string value)
{
    var list = value.Split('#');
    if (list != null )
    {
        ArrayList arr = new ArrayList();
        for (int i = 0; i < list.Length; i++)
        {
            foreach (var key in list)
            {
                if (key == null || string.IsNullOrEmpty(key.Trim()))
                {
                    continue;
                }
                var nric = key.Split('|')[0];
                var dob = key.Split('|')[1];
                s.NRIC = nric;
                s.DOB = Convert.ToDateTime(dob);
                arr.Add(s);
            }
        }
    }
}

将多个对象添加到数组列表

每次循环

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

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

当然,您的数组列表填充了相同的对象,并且您最终会在添加到 ArrayList 的所有项目上获得相同值的副本。

您需要为要添加到 ArrayList 的确切类型声明变量 s,然后在每个循环中使用 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 方面的专家,我想这段代码在您的控制器中,并且您希望返回一个通用列表,如此问题中所述。随意评论/修复返回类型的不精确代码。