通用列表的项目都相同

时间:2018-11-15 16:56:28

标签: c# list loops

我用对象(事件)填充列表。
该对象有一个称为DocumentDate的字段,这是我希望在每个项目中更新的字段。 但是循环之后,列表中的所有项目都是相同的!我想知道为什么:

代码:

private List<Events> CreateEventsBetween(string start, string end, string repeatState, Event defaultEvent)
{
    var states = Resources.GetStringArray(Resource.Array.repeat_states);
    DateTime.TryParse(start, out DateTime dtStart);
    DateTime.TryParse(end, out DateTime dtEnd);
    List<Event> events = new List<Event>();

    if (repeatState == states[0])
        while(dtStart<= dtEnd)
        {
            var e = defaultEvent;
            e.DocumentDate = dtStart;
            events.Add(e);

            dtStart= dtStart.AddDays(i);
        }
    ...
    ...
    ...

    return events;
}

这里事件列表中的每个项目都应具有相同的DocumentDate,但它们应具有不同的日期

1 个答案:

答案 0 :(得分:2)

因为所有事件都是相同的引用。您将其分配到var e = defaultEvent;

相反,您需要使用new进行初始化:

var e = new Event{ DocumentDate = dtStart }; // other properties as well