创建模型的不同对象

时间:2018-08-01 17:01:04

标签: c# .net object

我有一个像这样的简单模型:

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);替换四个对象?

4 个答案:

答案 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就是这样工作的。如果AssignStatisticsModelvalue type(而不是struct(是class),则将变量传递到方法将复制其内容。

答案 3 :(得分:0)

要在此处添加其他答案,您可以研究“引用”和“值”类型之间的区别。这是一个不错的link

  

引用类型变量存储在堆中,而值类型变量存储在堆中。值类型:值类型将其内容存储在堆栈上分配的内存中。创建值类型时,会在内存中分配一个空格来存储值,并且该变量直接保存一个值。   More Here