List.Clear()不起作用

时间:2016-08-01 08:27:30

标签: c#

private Map GetMinMaxDistanceShcoolData(Map MonitorsData)
{
    var tempData = MonitorsData.MonitorsDataList;

    if (tempData != null)
    {
        foreach (var monitor in tempData)
        {
            foreach (var tehsil in monitor.Tehsils)
            {
                var ordered = tehsil.Schools.OrderBy(x => x.Distance).ToList();
                var min = ordered.FirstOrDefault();
                var max = ordered.LastOrDefault();

                ordered.ToList().Clear();

                tehsil.Schools.ToList().Add(min);
                tehsil.Schools.ToList().Add(max);
            }
        }
    }

    return null;
}

清除列表之前和之后列表的计数是相同的。 即使我使用Remove()而不是Clear(),它也不会删除列表。 另外,Add(min)和Add(max)也不起作用。

6 个答案:

答案 0 :(得分:3)

它工作得很好,你只需要拨打多个ToList

ordered是一个List,然后你调用ToList(创建一个新的List),然后你清除最后一个List(不触及第一个)。

你写的是什么:

ordered.ToList().Clear();

相同
var newlist = ordered.ToList();
newlist.Clear(); // of course this doesn't clear ordered

您需要做的只是

ordered.Clear();

答案 1 :(得分:0)

你做错了。 ToList创建一个新列表,因此Ordered是一个新列表,您可以清除它,但不清除原始数据。

 ordered.ToList().Clear();

同样ordered已经是一个列表,调用ToList是多余的

我认为你打算这样做:

var ordered = tehsil.Schools.OrderBy(x => x.Distance).ToList();
var min = ordered.FirstOrDefault();
var max = ordered.LastOrDefault();

tehsil.Schools.Clear();

tehsil.Schools.Add(min);
tehsil.Schools.Add(max);

答案 2 :(得分:0)

ToList()

之前移除Clear()来电
var tempData = MonitorsData.MonitorsDataList;

if (tempData != null)
{
    foreach (var monitor in tempData)
    {
        foreach (var tehsil in monitor.Tehsils)
        {
            var ordered = tehsil.Schools.OrderBy(x => .Distance).ToList();
            var min = ordered.FirstOrDefault();
            var max = ordered.LastOrDefault();

            ordered.Clear();

            tehsil.Schools.ToList().Add(min);
            tehsil.Schools.ToList().Add(max);
        }
    }
}

答案 3 :(得分:0)

ordered.ToList().Clear();替换为ordered.Clear();

答案 4 :(得分:0)

您正在清除.ToList()

创建的列表
ordered.ToList().Clear();
// .ToList() - Creates a new list.
// .Clear() - Clears the list that was created.

清除列表使用:

ordered.Clear();
// .Clear() - Clears the list called ordered.

答案 5 :(得分:0)

嗨,这里有一些问题,请尝试这样的事情。

foreach (var tehsil in monitor.Tehsils)
{
    var ordered = tehsil.Schools.OrderBy(x => x.Distance).ToList();
    if(!ordered.Any || ordered.Count < 3) continue;
    var maxmin = new List<tehsil.Schools> { ordered.FirstOrDefault(), ordered.LastOrDefault() }
    tehsil.Schools = maxmin;
}