Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串行到列表<;列表>;使用相同的值进行拆分_C#_List - Fatal编程技术网

C# 从字符串行到列表<;列表>;使用相同的值进行拆分

C# 从字符串行到列表<;列表>;使用相同的值进行拆分,c#,list,C#,List,我编写了一种静态方法,从文本文件中读取科学数字(X,Y),并将其放入列表中。但我不知道为什么文件中的下一个值会覆盖所有其他值 如果!=100-100是文本文件的第一个值,也是我的程序的唯一属性 static List<List<double>> DownloadData(string path1) { List<List<double>> lista = new List<List<double>>

我编写了一种静态方法,从文本文件中读取科学数字(X,Y),并将其放入列表中。但我不知道为什么文件中的下一个值会覆盖所有其他值

如果!=100-100是文本文件的第一个值,也是我的程序的唯一属性

 static List<List<double>> DownloadData(string path1)
    {
        List<List<double>> lista = new List<List<double>>();
        List<double> doubelowa = new List<double>();
        doubelowa.Clear();
        string line = null;
        try
        {

            using (TextReader sr = File.OpenText(path1))
            {

                while ((line = sr.ReadLine()) != null)
                {
                    doubelowa.Clear();
                    if (line != "100")
                    {
                        var d = line.Split().Select(f => double.Parse(f, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture));
                        doubelowa.AddRange(d);
                        lista.Add(doubelowa);
                    }
                }
            }
        }
        finally
        {

        }
        return lista;
    }
静态列表下载数据(字符串路径1)
{
List lista=新列表();
List doubelowa=新列表();
doubelowa.Clear();
字符串行=null;
尝试
{
使用(TextReader sr=File.OpenText(路径1))
{
而((line=sr.ReadLine())!=null)
{
doubelowa.Clear();
如果(行!=“100”)
{
var d=line.Split().Select(f=>double.Parse(f,System.Globalization.NumberStyles.Float,CultureInfo.InvariantCulture));
杜贝洛瓦.阿德兰奇(d);
添加(杜贝洛瓦);
}
}
}
}
最后
{
}
返回列表a;
}
在我写这个方法之前,它的工作很棒。但是现在当我写越来越多的代码时,我不知道发生了什么变化。我试着把它修好,但是

它的屏幕上显示了当地人:


出于某种原因,double.clear()清除list Lista的值。为什么?

那是因为你在一次又一次地添加同一个对象。如果希望存储不同的
列表
s,则需要在每次迭代中使用新的
列表

if (line != "100")
{
   var d = line.Split().Select(f => double.Parse(f, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture));
   lista.Add(new List<double>(d));
}
if(行!=“100”)
{
var d=line.Split().Select(f=>double.Parse(f,System.Globalization.NumberStyles.Float,CultureInfo.InvariantCulture));
添加(新列表(d));
}
如果您添加
doubelowa
,您只是在一次又一次地添加相同的引用(并且在每次迭代中都会覆盖它)


使用屏幕截图进行编辑后

以防你不清楚答案。。。当您将
doublelowa
添加到
lista
时,您每次只需添加相同的列表

因此,
lista
只是在每个元素上保持相同的对象:

  • lista[0]
    指向
    doublelowa
  • lista[1]
    指向
    doublelowa
  • lista[2]
    指向
    doublelowa
  • 等等

因此,如果在任意点清除
doublelowa
,则
lista
的所有元素都将指向相同的空列表。正如我在上面所写的,解决方案是让每个元素都是一个不同的列表,而不是可以通过我写的代码实现的
doublelowa
(你可以完全忽略
doublelowa
,因为它不再需要了)。

这是因为你反复添加同一个对象。如果希望存储不同的
列表
s,则需要在每次迭代中使用新的
列表

if (line != "100")
{
   var d = line.Split().Select(f => double.Parse(f, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture));
   lista.Add(new List<double>(d));
}
if(行!=“100”)
{
var d=line.Split().Select(f=>double.Parse(f,System.Globalization.NumberStyles.Float,CultureInfo.InvariantCulture));
添加(新列表(d));
}
如果您添加
doubelowa
,您只是在一次又一次地添加相同的引用(并且在每次迭代中都会覆盖它)


使用屏幕截图进行编辑后

以防你不清楚答案。。。当您将
doublelowa
添加到
lista
时,您每次只需添加相同的列表

因此,
lista
只是在每个元素上保持相同的对象:

  • lista[0]
    指向
    doublelowa
  • lista[1]
    指向
    doublelowa
  • lista[2]
    指向
    doublelowa
  • 等等

因此,如果在任意点清除
doublelowa
,则
lista
的所有元素都将指向相同的空列表。正如我上面所写的,解决方案是让每个元素都是一个不同的列表,而不是我写的代码可以实现的
doublelowa
(你可以完全忽略
doublelowa
,因为它不再需要了)。

我相信现在发生的事情是,你只需要创建一个列表对象,你一次又一次地强调这一点。这样,通过更改doubelowa可以更改所有对象,因为它们实际上都是同一个对象。要更正此问题,请尝试替换
doubelowa.Clear()带有
doubelowa=新列表()

我相信现在发生的事情是,您只创建了一个列表对象,您将列表一次又一次指向它。这样,通过更改doubelowa可以更改所有对象,因为它们实际上都是同一个对象。要更正此问题,请尝试替换
doubelowa.Clear()带有
doubelowa=新列表()

Jcl感谢您的解释。我用幸运的办法修复它,你可以在下面看到。但是如果没有你,我不认为那是关于推荐人的

发生这种情况可能是因为引用是针对每个单元格的,而循环完成时垃圾收集器没有清理?如果你愿意的话,请给我详细解释一下

                if (line != "100")
                {
                    List<double> doubelowa = new List<double>();
                    doubelowa.AddRange(line.Split().Select(f => double.Parse(f, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture)));
                    lista.Add(doubelowa);
                }
if(行!=“100”)
{
List doubelowa=新列表();
AddRange(line.Split().Select(f=>double.Parse(f,System.Globalization.NumberStyles.Float,CultureInfo.InvariantCulture));
添加(杜贝洛瓦);
}

Jcl感谢您的解释。我用幸运的办法修复它,你可以在下面看到。但是如果没有你,我不认为那是关于推荐人的

发生这种情况可能是因为引用是针对每个单元格的,而循环完成时垃圾收集器没有清理?如果你愿意的话,请给我详细解释一下

                if (line != "100")
                {
                    List<double> doubelowa = new List<double>();
                    doubelowa.AddRange(line.Split().Select(f => double.Parse(f, System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture)));
                    lista.Add(doubelowa);
                }
if(行!=“100”)
{
List doubelowa=新列表(