将多个对象添加到数组列表
本文关键字:数组 列表 添加 对象 | 更新日期: 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 方面的专家,我想这段代码在您的控制器中,并且您希望返回一个通用列表,如此问题中所述。随意评论/修复返回类型的不精确代码。