2016-11-05 5 views
2

Ich versuche, zwei Sätze zu erstellen und beide in eine Liste aufzunehmen und alle Elemente in der Liste anzuzeigen. Ich erhalte einen Fehler mit meinem Code. Fehler: System.Collections.Generic.List 1[System.Collections.Generic.SortedSet 1 [System.String]] Ich füge meinen Code unten an. Jede Hilfe wird geschätzt.Alle Zeichenfolgen in einer Liste anzeigen

namespace Prog 5 
    { 
     class Program 
     {   
    static void Main(string[] args) 
    { 
     List<SortedSet<string>> items = new List<SortedSet<string>>(); 
     SortedSet<string> set = new SortedSet<string>(); 
     SortedSet<string> set2 = new SortedSet<string>(); 

     set.Add("a"); 
     set.Add("b"); 
     set.Add("d"); 
     set.Add("c"); 
     set2.Add("e"); 
     set2.Add("d"); 
     set2.Add("c"); 
     foreach (string item in set) 
     { 
      items.Add(set); 
     } 
     foreach (string item in set2) 
     { 
      items.Add(set2); 
     } 
     DisplayItem(items); 

    } 

    public static void DisplaySet(SortedSet<string> set) 
    { 

     string set1 = string.Join(",", set); 
     Console.WriteLine(set1); 
     Console.ReadLine(); 
    } 

    public static void DisplayItem(List<SortedSet<string>> items) 
    { 
     foreach (SortedSet<string> item in items) 
     { 
      Console.WriteLine(items); 
      Console.ReadLine(); 
     } 
    } 
     } 

Antwort

0

SortedSet<string> erbt von Object und das Standardverhalten von ToString() ist GetType().ToString();, weil der, dass Sie System.Collections.Generic.List1[System.Collections.Generic.SortedSet1[System.String]] in der Konsole erhalten. Reference Code

public virtual String ToString() 
{ 
    return GetType().ToString(); 
} 

LÖSUNG: Wenn Sie Elemente der SortedSet in der Konsole angezeigt werden soll, sollten Sie diese verwenden:

Console.WriteLine(string.Join(",", item.ToArray())); 

Dies wird alle Fäden in der SortedSet verketten und zeigen sie in der Konsole mit , Separator.

0

In DisplayItem (...) haben Sie Console.WriteLine (Elemente) ... welcher Typ List> ist. ToString() wird automatisch aufgerufen, um eine Zeichenfolge für die Ausgabe von Console.WriteLine zu erstellen: Deshalb erhalten Sie Ihre aktuelle Nachricht. Ich schätze, dass Sie jedes Element zur Konsole schreiben möchten.

0

Wenn ich Ihre Anforderungen richtig verstanden habe, möchten Sie 2 SortedSets in einzelne Liste zusammenführen oder vielleicht setzen.

sollte der folgende Code arbeitet (Erklärungen, warum es funktioniert folgen):

class Program 
{ 
    static void Main(string[] args) 
    { 
     SortedSet<string> items = new SortedSet<string>(); 
     SortedSet<string> set = new SortedSet<string>(); 
     SortedSet<string> set2 = new SortedSet<string>(); 

     set.Add("a"); 
     set.Add("b"); 
     set.Add("d"); 
     set.Add("c"); 
     set2.Add("e"); 
     set2.Add("d"); 
     set2.Add("c"); 
     foreach (string item in set) 
     { 
      items.Add(item); 
     } 
     foreach (string item in set2) 
     { 
      items.Add(item); 
     } 
     DisplayItem(items); 

    } 

    public static void DisplaySet(SortedSet<string> set) 
    { 

     string set1 = string.Join(",", set); 
     Console.WriteLine(set1); 
     Console.ReadLine(); 
    } 

    public static void DisplayItem(SortedSet<string> items) 
    { 
     foreach (string item in items) 
     { 
      Console.WriteLine(item); 
     } 
     Console.ReadLine(); 
    } 
} 

Das Hauptproblem in fraglichem Code aufgeführt ist, dass es eine Liste der OrderedSet<string> Objekte zu erstellen versucht. Da jede OrderedSet<string> eine Sammlung von Strings darstellt, müssen Sie diese Sammlungen durchlaufen und Strings in eine neue Sammlung einfügen. Der in Frage gestellte Code tut es nicht. Stattdessen fügt es 7 OrderedSet<string> Objekte in die Liste ein.

Korrigierte Code-Korrekturen, die ein neues OrderedList<string> ausgeben und Zeichenfolgen hinzufügen. Sie können entscheiden, welche Sammlung es ist, abhängig von Ihren Anforderungen. Wenn Sie eine Sammlung benötigen, die keine Duplikate enthält und sortiert werden soll, können Sie eine neue OrderedSet<string> wählen. Wenn Sie jedoch keine Duplikate benötigen, können Sie eine List<string> auswählen.

Wenn Sie den Unterschied zwischen OrderedSet<string> und List<string> vergleichen möchten, können Sie den Datentyp 'items' einfach in List<string> ändern und das Programm ausführen.

Stromausgang:

a 
b 
c 
d 
e 

Wenn Sie

SortedSet<string> items = new SortedSet<string>(); 

zu

List<string> items = new List<string>(); 
... 
public static void DisplayItem(List<string> items) 
{ 
... 

ändern erhalten Sie:

a 
b 
c 
d 
c 
d 
e 
Verwandte Themen