using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class Employee
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int reqId;
public int ReqId
{
get { return reqId; }
set { reqId = value; }
}
}
class Program
{
static void Main(string[] args)
{
Dictionary<int, Employee> d1 = new Dictionary<int, Employee>();
d1.Add(1, new Employee { Name="Amol" });
List<Employee> lstEmps = new List<Employee>();
Employee emp=null;
for(int i=0;i<2;i++)
{
emp = null;
emp = d1[1];
emp.ReqId = i;
lstEmps.Add(emp);
}
}
}
}
因此,在更新ReqId时,它会更新列表中存在的所有对象。在最后一次迭代中,它为list中的所有对象分配相同的值。它是因为从字典或任何引用问题中获取它而发生的。 我想给ReqId一个唯一的id。
答案 0 :(得分:2)
这是因为您创建了一个对象,并继续将其添加到循环列表中。
您的词典d1
只包含一个对象 - 此处添加的对象:
d1.Add(1, new Employee { Name="Amol" });
拉两次并分配到emp
并不会复制它 - 您将同一个对象添加到lstEmp
。
为了解决此问题,您需要制作Employee
对象的副本,而不是重复使用它:
for(int i=0;i<2;i++) {
lstEmps.Add(new Employee {
Name = d1[1]
, ReqId = i
});
}
答案 1 :(得分:1)
是的,这是由于参考问题。类是引用类型。此外,您不是在创建班级员工的对象。你是一次又一次地指同一个字典项目。
private static void Main(string[] args)
{
Dictionary<int, Employee> d1 = new Dictionary<int, Employee>();
d1.Add(1, new Employee { Name = "Amol" });
List<Employee> lstEmps = new List<Employee>();
Employee emp = null;
for (int i = 0; i < 2; i++)
{
emp = new Employee();
emp.Name = d1[1].Name;
emp.ReqId = i;
lstEmps.Add(emp);
}
}