列表中的所有项目都具有相同的值

时间:2019-03-15 11:56:06

标签: c#

我正在尝试创建一个列表并将值插入其中。但是,当我添加新项目时,会将列表中的所有现有项目更改为我添加的相同值,我不明白为什么。

这是我的代码:

public List<Times> CreateListOfTimes()
{
    var listOfTimes = new List<Times>();
    var times = new Times();
    int startTime = 8;
    int endTime = startTime + 1;
    for (int i = 0; i < 8; i++)
    {
        times.StartTime = startTime;
        times.EndTime = endTime;
        listOfTimes.Add(times);
        startTime++;
        endTime++;
    }
    return listOfTimes;
}

我第一次在times,times.StartTime = 8和times.EndTime = 9中添加值。 当我第二次循环时,我添加9和10,但同时也将已经添加的8和9更改为9和10。为什么会发生,如何解决?

2 个答案:

答案 0 :(得分:6)

因为每次都有相同的Times对象,所以您必须在循环中创建一个新对象:

for (int i = 0; i < 8; i++)
{
    var times = new Times();
    times.StartTime = startTime;
    times.EndTime = endTime;
    listOfTimes.Add(times);
    startTime++;
    endTime++;
}

答案 1 :(得分:0)

EpicKip的答案已经解决了您的问题(我对此表示赞同),但这是使用Linq的替代方法。如果您不熟悉Linq,请检查它;)

public static List<Time> CreateListOfTimes()
{   
    return Enumerable.Range(8, 8).Select(i => new Times
    {
        StartTime = i,
        EndTime = i + 1
    }).ToList();
}

在这里我们使用Enumerable.RangeEnumerable.SelectToList()并不是真正需要的。我使用它来尊重CreateListOftimes()的签名。