C# 使用列表和;新";参数

C# 使用列表和;新";参数,c#,list,object,C#,List,Object,嗯,我是新来C#的,似乎我这里有个问题。我已经知道这个问题了,但我不知道如何解决它。我只是在覆盖要添加到列表中的对象。有人能帮我吗 List<string> dataSet = new List<string>(); string s; while ((s = sr.ReadLine()) != null) { if (!String.IsNullOrEmpty(s)) { if (s[0] == '$') {

嗯,我是新来C#的,似乎我这里有个问题。我已经知道这个问题了,但我不知道如何解决它。我只是在覆盖要添加到列表中的对象。有人能帮我吗

List<string> dataSet = new List<string>();
string s;
while ((s = sr.ReadLine()) != null)
{
    if (!String.IsNullOrEmpty(s))
    {
        if (s[0] == '$')
        {
            dataSet.Add(s);
            if (s.Contains("GPGGA"))
            {
                myData.Add(new DataSet(dataSet));
                dataSet.Clear();
                Console.WriteLine();
            }
        }
    }
}
列表数据集=新列表();
字符串s;
而((s=sr.ReadLine())!=null)
{
如果(!String.IsNullOrEmpty)
{
如果(s[0]=='$')
{
数据集。添加;
如果(s.包含(“GPGGA”))
{
添加(新数据集(数据集));
dataSet.Clear();
Console.WriteLine();
}
}
}
}

如果我正确理解您的问题,请将字符串列表添加到数据集。然后,您将清除该列表。在我看来,你在列表中添加了一个引用,然后你在列表中的调用被清除了。这就是你失去价值观的原因。您需要将该列表的副本添加到另一个数据集中。请尝试下面的代码

List<string> dataSet = new List<string>();
string s;
while ((s = sr.ReadLine()) != null)
{
    if (!String.IsNullOrEmpty(s))
    {
        if (s[0] == '$')
        {
            dataSet.Add(s);
            if (s.Contains("GPGGA"))
            {
                myData.Add(new DataSet(dataSet.ToList()));
                dataSet.Clear();
                Console.WriteLine();
            }
        }
    }
}
列表数据集=新列表();
字符串s;
而((s=sr.ReadLine())!=null)
{
如果(!String.IsNullOrEmpty)
{
如果(s[0]=='$')
{
数据集。添加;
如果(s.包含(“GPGGA”))
{
添加(新数据集(DataSet.ToList());
dataSet.Clear();
Console.WriteLine();
}
}
}
}

dataSet.ToList()将返回列表的副本,而不是向其添加引用,这样,如果我正确理解您向数据集添加字符串列表的问题,dataSet.Clear()将不会清除您添加到myData的列表。然后,您将清除该列表。在我看来,你在列表中添加了一个引用,然后你在列表中的调用被清除了。这就是你失去价值观的原因。您需要将该列表的副本添加到另一个数据集中。请尝试下面的代码

List<string> dataSet = new List<string>();
string s;
while ((s = sr.ReadLine()) != null)
{
    if (!String.IsNullOrEmpty(s))
    {
        if (s[0] == '$')
        {
            dataSet.Add(s);
            if (s.Contains("GPGGA"))
            {
                myData.Add(new DataSet(dataSet.ToList()));
                dataSet.Clear();
                Console.WriteLine();
            }
        }
    }
}
列表数据集=新列表();
字符串s;
而((s=sr.ReadLine())!=null)
{
如果(!String.IsNullOrEmpty)
{
如果(s[0]=='$')
{
数据集。添加;
如果(s.包含(“GPGGA”))
{
添加(新数据集(DataSet.ToList());
dataSet.Clear();
Console.WriteLine();
}
}
}
}

dataSet.ToList()将返回列表的副本,而不是添加对它的引用,这样dataSet.Clear()就不会清除添加到myData中的列表。我认为您可能遇到的问题之一是,您将自己的
列表命名为关键字有点困惑。一个
数据集
是它自己的东西,这使得代码很难阅读。首先,让我们清理一下:

List<string> theData = new List<string>();
string s;
while ((s = sr.ReadLine()) != null)
{
    if (!String.IsNullOrEmpty(s))
    {
        if (s[0] == '$')
        {
            theData.Add(s);
            if (s.Contains("GPGGA"))
            {
                myData.Add(new DataSet(theData)); //you're passing your source by reference.
                theData.Clear();
                Console.WriteLine();
            }
        }
    }
}

即使有了这些,如果您查看
DataTable
StringBuilder
类,也会为自己节省很多麻烦。有比你现在尝试的更好的方法来完成这一切

我认为您可能遇到的一个问题是,您将自己的
列表
命名为一个关键字,这让您有点困惑。一个
数据集
是它自己的东西,这使得代码很难阅读。首先,让我们清理一下:

List<string> theData = new List<string>();
string s;
while ((s = sr.ReadLine()) != null)
{
    if (!String.IsNullOrEmpty(s))
    {
        if (s[0] == '$')
        {
            theData.Add(s);
            if (s.Contains("GPGGA"))
            {
                myData.Add(new DataSet(theData)); //you're passing your source by reference.
                theData.Clear();
                Console.WriteLine();
            }
        }
    }
}

即使有了这些,如果您查看
DataTable
StringBuilder
类,也会为自己节省很多麻烦。有比你现在尝试的更好的方法来完成这一切

您的问题是什么?请详细说明覆盖了哪些值以及您试图执行的操作。当我将第二个数据集添加到名为“myData”的列表中时,它会覆盖所有现有数据,因此我的列表中只有该数据的最新副本和x个副本myData的类型是什么?我注意到的一件事是,在执行mydata.Add之后,正在清除if块中的数据集。不确定逻辑是否正确,但这肯定会清除数据集,并且只有在while循环结束时才有最新的附加值。此外,我认为数据集不支持此构造函数。您的问题是什么?请详细说明覆盖了哪些值以及您试图执行的操作。当我将第二个数据集添加到名为“myData”的列表中时,它会覆盖所有现有数据,因此我的列表中只有该数据的最新副本和x个副本myData的类型是什么?我注意到的一件事是,在执行mydata.Add之后,正在清除if块中的数据集。不确定逻辑是否正确,但这肯定会清除数据集,并且只有在while循环结束时才有最新的附加值。此外,我认为数据集不支持此构造函数。你测试过这个吗?因为DataSet似乎没有一个以列表为参数的构造函数。我在发布后注意到了这个奇怪的构造函数,所以我回去更正了它并补充了答案。我不知道DataSet是一个预定义的类,我写了我自己的DataSet类,做了完全不同的事情看看这篇文章:然后看看这个:你测试过这个吗-因为DataSet似乎没有一个以列表为参数的构造函数。我在发布后注意到了这个奇怪的构造函数,我不知道DataSet是一个预定义的类,我写了我自己的DataSet类,它做的事情完全不同看看这篇文章:然后看看这个: