Nun, ich bin neu in C# und es scheint, dass ich ein Problem direkt hier habe. Ich kenne das Problem bereits, aber ich weiß nicht, wie ich es lösen soll. Ich überschreibe einfach das Objekt, das ich meiner Liste hinzufügen möchte. Kann mir jemand helfen?Verwirrung bei der Arbeit mit Listen und dem "neuen" Parameter
Antwort
Wenn ich Ihr Problem richtig verstehe, fügen Sie eine Liste von Zeichenfolgen zu einem Dataset hinzu. Sie löschen diese Liste dann. Es sieht für mich so aus, dass Sie einen Verweis auf eine Liste hinzufügen, dann wird Ihr Anruf auf dieser Liste gelöscht. Deshalb verlieren Sie Ihre Werte. Sie müssen dem anderen Dataset eine Kopie dieser Liste hinzufügen. Versuchen Sie den Code unten
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();
}
}
}
}
dataSet.ToList() wird eine Kopie der Liste zurückzukehren, anstatt einen Verweis darauf hinzuzufügen, dass die Art und Weise DataSet.Clear() wird die Liste nicht löschen Sie myData hinzugefügt
Ich denke, eines der Probleme, die Sie möglicherweise haben, ist, dass Sie sich ein wenig verwirrt haben, indem Sie Ihr List<T>
ein Schlüsselwort benennen. A DataSet
ist eine eigene Sache und macht diesen Code sehr schwer zu lesen. Lassen Sie uns zunächst, dass aufzuräumen:
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();
}
}
}
}
Sie müssen den Wert Ihrer Datenquelle zu übergeben, aber ein List<T>
ist ein Referenztyp.
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"))
{
List<string> bindingdata = theData.ToList();
myData.Add(new DataSet(bindingData)); //you're passing
//your source by value, because it's using a new list.
theData.Clear(); //you can now safely do this.
Console.WriteLine();
}
}
}
}
Das alles getan, es immer noch nicht funktionieren, weil DataSet
keinen Konstruktor hat, der ein List<string>
akzeptiert. Sie müssen myData.Add(new DataSet(theData))
zum tatsächlichen Konstruktor ändern. Interessanterweise ist Ihre DataSet
möglicherweise die schlechte Wahl für das, was Sie hier tun. Wenn Sie nicht mehrere Tabellen verwenden, die Sie nicht zu sein scheinen, verwenden Sie nur eine DataTable
.
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"))
{ //we don't need this now.
//List<string> bindingdata = theData.ToList();
//make myData a DataSet so you can use datatables
// instead of attempting IEnumerable<DataSet>
DataTable foo = new DataTable("Foo");
foreach(string s in theData)
{
var y = foo.NewRow();
y[0] = s;
foo.Rows.Add(y);
}
myData.Add(foo);
theData.Clear(); //you can now safely do this.
Console.WriteLine();
}
}
}
}
Selbst mit all das, würden Sie sich eine Menge Ärger Speichern, wenn Sie den Blick in DataTable
und StringBuilder
Klassen. Es gibt bessere Möglichkeiten, all das zu tun, als du versuchst.
Haben Sie dies getestet - da DataSet anscheinend keinen Konstruktor hat, der eine Liste als Parameter akzeptiert. – PaulF
Ich bemerkte den seltsamen Konstruktor, nachdem ich gepostet hatte, also ging ich zurück und korrigierte es und ergänzte die Antwort. – CDove
Ich wusste nicht, dass DataSet eine vordefinierte Klasse ist, ich schreibe meine eigene DataSet-Klasse, die ganz andere Dinge tut – Michael
- 1. C Programm: Neuling Verwirrung bei der Arbeit mit Zeichenkettenarrays
- 2. Wie funktioniert ApiMember bei der Arbeit mit dem Dotnet-Core?
- 3. PATCH bei der Arbeit mit DTO
- 4. Verwirrung, während das Verständnis Parameter der Haupt
- 5. Verwirrung mit dem Verhalten der Klausel HAVING
- 6. C# Hilfe bei der Arbeit mit Arrays
- 7. Python __import__ Parameter Verwirrung
- 8. Hot reload bei der Arbeit mit Vue
- 9. Apache CXF webclient Arbeit mit Listen von Listen
- 10. Mehrere Parameter Listen und Standardargumente
- 11. Verwirrung mit dem Django-Berechtigungssystem
- 12. Express.js API-Funktion Parameter Verwirrung
- 13. Verwirrung über anonyme Methoden Parameter
- 14. Verwirrung bei der Bereitstellung von Modulen mit Django
- 15. Alamofire AFError bei der Arbeit mit Flickr API
- 16. Direkte DOM-Zugriffe bei der Arbeit mit React-Redux
- 17. Wird bei der Arbeit mit Elastic Beanstalk benötigt?
- 18. Arbeit mit doppelten Anführungszeichen und Parameter zu einer Abfrage hinzufügen
- 19. Gibt es Gesetze bei der Arbeit mit vertraulichen Finanzdaten?
- 20. Durandal Splash-Screen bei der Arbeit mit Versprechen
- 21. Update Spotlight Search Index bei der Arbeit mit Core Data?
- 22. Wie funktioniert der GitHub Developer-Plan bei der Arbeit mit mehreren Benutzern?
- 23. RewriteRule url mit einem Parameter einer neuen URL mit dem gleichen Parameter
- 24. URL-Codierung mit dem neuen Spring UriComponentsBuilder
- 25. Problem mit dem Verständnis, wie Zeiger und "neue" Arbeit
- 26. Kann mir jemand bei der Arbeit mit PostScript helfen?
- 27. Workflow auf Git bei der Arbeit mit parallelen Releases
- 28. Benötigen Sie Hilfe bei der Arbeit mit Infragistics webdatagrid
- 29. Benötigen Sie Hilfe bei der Arbeit mit SMMRY API
- 30. Wie aktualisiere ich Clojure-Abhängigkeiten bei der Arbeit mit nrepl.el?
Was ist dein Problem? – Quantic
Bitte erläutern Sie, welcher Wert überschrieben wird und was Sie versuchen zu tun. – bc004346
Wenn ich ein zweites Dataset zu meiner Liste "myData" hinzufüge überschreibt es alle vorhandenen Daten, so dass nur die neuesten und x Kopien davon in meiner Liste sind – Michael