我有一个像这样的简单模型:
public class AssignStatisticsModel
{
public string TasksName { get; set; }
public int Time { get; set; }
}
我想在其中创建四个对象:
List<AssignStatisticsModel> textModels = new List<AssignStatisticsModel>();
AssignStatisticsModel textmodel = new AssignStatisticsModel();
textmodel.TasksName = "Progress to Back Check";
textModels.Add(textmodel);
textmodel.TasksName = "Back Check to Corrections";
textModels.Add(textmodel);
textmodel.TasksName = "Corrections to Completed";
textModels.Add(textmodel);
textmodel.TasksName = "Progress to Completed";
textModels.Add(textmodel);
但是由于某种原因,所有名为TasksNames
的{{1}}都会与我添加的每个"Progress to Completed"
创建一个。为什么最后一个TasksName
用相同的textModels.Add(textmodel);
替换四个对象?
答案 0 :(得分:7)
您要多次重写同一实例的TasksName
属性,然后将同一实例四次添加到List
中。 Collection initializer将解决您的问题:
var textModels = new List<AssignStatisticsModel>()
{
new AssignStatisticsModel {TasksName = "Progress to Back Check"},
new AssignStatisticsModel {TasksName = "Back Check to Corrections"},
new AssignStatisticsModel {TasksName = "Corrections to Completed"},
new AssignStatisticsModel {TasksName = "Progress to Completed"},
};
答案 1 :(得分:3)
您每次必须创建一个新的textmodel
对象。完成的操作将同一对象添加到列表中4次:
List<AssignStatisticsModel> textModels = new List<AssignStatisticsModel>();
var textmodel = new AssignStatisticsModel { TasksName = "Progress to Back Check" };
textModels.Add(textmodel);
textmodel = new AssignStatisticsModel { TasksName = "Back Check to Corrections" };
textModels.Add(textmodel);
textmodel = new AssignStatisticsModel { TasksName = "Corrections to Completed" };
textModels.Add(textmodel);
textmodel = new AssignStatisticsModel { TasksName = "Progress to Completed" };
textModels.Add(textmodel);
答案 2 :(得分:1)
您正在创建AssignStatisticsModel
类的一个实例(或对象),并在上设置TasksName
属性四次相同的对象。将对象传递给方法(在您的示例中为Add
方法)不会复制该对象,而是将对该对象的 reference 传递给该方法。您实际上在列表中拥有对一个对象的四个引用。 reference types就是这样工作的。如果AssignStatisticsModel
是value type(而不是struct
(是class
),则将变量传递到方法将复制其内容。
答案 3 :(得分:0)