C# 如何避免循环内的数据丢失

C# 如何避免循环内的数据丢失,c#,arrays,list,for-loop,C#,Arrays,List,For Loop,我有一个奇怪的问题,我在一个简单的for循环中丢失了数据 基本上,我有一个间隔,我必须在较小的间隔中切割一个标记(这里是5.0)。整个结果保存到列表数组中 我使用开关索引(例如,我们可以通过find comamnds轻松获得数字5的索引)和块数(最后的间隔较小) 我的算法运行良好,因为我在每次循环后打印提取的较小间隔。但是,当传递到下一个循环时,上一个间隔被放入一个空列表中。为什么会这样?最后我有一个无用的空列表数组 我添加了WriteLine语句来说明问题。在循环的一个过程结束之前,我得到了我

我有一个奇怪的问题,我在一个简单的for循环中丢失了数据

基本上,我有一个间隔,我必须在较小的间隔中切割一个标记(这里是5.0)。整个结果保存到列表数组中

我使用开关索引(例如,我们可以通过find comamnds轻松获得数字5的索引)和块数(最后的间隔较小)

我的算法运行良好,因为我在每次循环后打印提取的较小间隔。但是,当传递到下一个循环时,上一个间隔被放入一个空列表中。为什么会这样?最后我有一个无用的空列表数组

我添加了WriteLine语句来说明问题。在循环的一个过程结束之前,我得到了我想要的间隔,但是当传递到下一个循环时,不知何故变量被清空了

    var wholeList = new List<double> { 1.2, 2.5, 5.0, 2.2, 3.4, 5.0, 1.2, 2.5, 5.0, 2.2, 3.4, 5.0, 1.2, 2.5, 5.0, 2.2, 3.4, 5.0 };
    int[] switchIndex = { 2, 5, 8, 11, 14, 17};
    int number0 = 6;

    var result0 = DivideInterval(wholeList, number0, switchIndex);
var wholeList=新列表{1.2,2.5,5.0,2.2,3.4,5.0,1.2,2.5,5.0,2.2,3.4,5.0,1.2,2.5,5.0,2.2,3.4,5.0};
int[]switchIndex={2,5,8,11,14,17};
整数0=6;
var result0=分割区间(整列,数字0,切换索引);
调用函数

    List<double>[] DivideInterval(List<double> myList, int numberOfBlocks, int[] switchingPoint)
    {
        List<double>[] finalArray = new List<double>[numberOfBlocks];
        var temporaryList = new List<double> { };


        int j = 0;

        for (int i = 0; i < switchingPoint.Length; i++)
        {

            for (int k = j; k <= switchingPoint[i]; k++)
                temporaryList.Add(myList[k]);

            finalArray[i] = temporaryList;

            Console.WriteLine("---");
            foreach (var item in finalArray[i])
                Console.WriteLine(item);
            Console.WriteLine("---");
            temporaryList.Clear();
            j = switchingPoint[i] + 1;

        }

        Console.WriteLine("--final result");
        for (int item = 0; item < finalArray.Length; item++)
        {
            Console.WriteLine("length is: " + finalArray[item].Count());
            for (int number = 0; number < finalArray[item].Count(); number++)
                Console.WriteLine(item);
        }
        Console.WriteLine("--final result");


        return finalArray;

    }
List[]DivideInterval(List myList,int numberOfBlocks,int[]切换点)
{
列表[]finalArray=新列表[numberOfBlocks];
var temporaryList=新列表{};
int j=0;
对于(int i=0;i对于(int k=j;k您只有一个列表,即

var temporaryList = new List<double> { };
然后把它清理干净

temporaryList.Clear();
“两个”列表都被清除:数组中的一个和
临时列表
——因为它实际上只是一个实例(一个对象)

而不是

temporaryList.Clear();
您需要创建一个新对象:

temporaryList = new List<double> { };
temporaryList=新列表{};

您只有一个列表,即

var temporaryList = new List<double> { };
然后把它清理干净

temporaryList.Clear();
“两个”列表都被清除:数组中的一个和
临时列表
——因为它实际上只是一个实例(一个对象)

而不是

temporaryList.Clear();
您需要创建一个新对象:

temporaryList = new List<double> { };
temporaryList=新列表{};
试试这个

finalArray[i] = new List<double>();
finalArray[i].AddRange(temporaryList);
试试这个

finalArray[i] = new List<double>();
finalArray[i].AddRange(temporaryList);

List[]
-我在现实生活中从未见过这种情况……因为较小的间隔需要是动态的;它们没有固定的大小。它们可以是大的也可以是小的。这个示例只是简单地说明了问题。列表是一种更好的方法吗?
List[]
-我在现实生活中从未见过这样的代码…因为较小的间隔需要是动态的;它们没有固定的大小。它们可以大也可以小。这个例子只是简单地说明了问题。列表列表是更好的方法吗?非常感谢。我一直在想循环是否错误。我在错误的位置非常感谢。我一直想知道循环是否错误。我在错误的位置查看问题非常感谢