2009-07-23 13 views
2

Ich bin fest und ich brauche Hilfe. Wie auch immer, ich habe ein Visual Studio 2008-Konsolenprogramm, das ein Datum, eine Zeichenfolge, einen Booleschen Wert und eine Ganzzahl für jede Runde eines Spiels protokollieren muss. Sprich der Benutzer spielt 10 Runden, von denen ich 10 hätte.Collections Frage (.NET 3.5, C#)

Ich möchte diese Datensätze in einer Datenstruktur speichern (Sammlung glaube ich) und dann, nachdem das Spiel fertig ist, durchlaufen sie einen einfachen Konsolenbericht.

Ich stecke fest. Es scheint eine einfache Sache zu sein, aber ich kann keine Lösung finden. Ich stelle mir vor, dass es mehrere Möglichkeiten gibt, dies zu erreichen, aber ich suche nach der einfachsten Lösung.

Antwort

9

Edit: Ich wollte die Antwort darauf vereinfachen, aber vielleicht habe ich zu viel vereinfacht. Ich habe die veränderbare Struktur unten geändert (was eine schlechte Idee ist, danke für die Erinnerung an mich @Jon Skeet), mit einer Klasse und Eigenschaften auch.


Zuerst erzeugt den Datentyp die Informationen zu halten:

public class RoundInformation 
{ 
    public DateTime Date { get; set; } 
    public String Name { get; set; } 
    public Boolean DidCheat { get; set; } 
} 

dann die Liste erstellen, um es zu halten:

public List<RoundInformation> Rounds = new List<RoundInformation>(); 

Dann wird für jede Runde, bauen einen Wert mit die runden Informationsdaten und fügen sie zu der Liste hinzu:

RoundInformation info = new RoundInformation(); 
info.Date = DateTime.Now; 
info.Name = "Bob"; 
info.DidCheat = true; // Bob always cheats 
Rounds.Add(info); 

Um Schleife durch:

foreach (RoundInformation round in Rounds) 
{ 
    .. dump to console, left as an excercise 
} 
+0

+1, Sie tippen wahnsinnig schnell. – Brandon

+4

Ich habe eine Hochgeschwindigkeits-Netzwerkverbindung zu meinem Gehirn. Ich tippe überhaupt nicht. –

+0

+1 Sie müssen diese Antwort bereit haben, bevor die Frage kam; o) –

3

Versuchen Sie folgendes:

public class GameRound { 
    public DateTime Date {get; set;} 
    public string String {get; set;} 
    public bool Boolean { get; set;} 
    public int Integer { get; set; } 
} 

In einem Teil, mit den richtigen Variablennamen.

Dann in Ihrem Konsolenprogramm, fügen Sie die folgende Zeile an der Spitze:

List<GameRound> rounds = new List<GameRound>(); 

Dies macht eine „Liste“ von Runden, die hinzugefügt werden können, entfernt, und „geschleift“ durch.

Dann, wenn Sie wollen eine Runde, wie diese Verwendung Code hinzufügen:

rounds.Add(new GameRound { Date = theDate, String = theString, Boolean = theBool, Integer = theInt }); 

Dies macht ein neues GameRound Objekt und setzt alle Eigenschaften auf Werte. Denken Sie daran, das Datum usw. für die korrekten Namen/Werte zu ersetzen.

schließlich den Bericht zu erzeugen, versuchen Sie dies:

foreach (GameRound round in rounds) { 
    Console.WriteLine("Date: {0}\nString: {1}\nBoolean: {2}\nInteger: {3}", round.Date, round.String, round.Boolean, round.Integer); 
} 
+0

Richtig, das ist ziemlich Wort für Wort, woran ich noch arbeitete;) – Thorarin

+0

+1 für: Da Sie C# 3 Sprachfeatures verwenden, wie zum Beispiel automatische Eigenschaften, könnte auch der benannte Eigenschaftenkonstruktor verwendet werden. – maxwellb

0

Ich denke, Sie werden ein bisschen genauer sein, was Sie zu tun versuchen. Im Allgemeinen benötigen Sie eine Datenstruktur für Datum, String, Boolean und Integer. Sie können dazu ein Struct oder eine benutzerdefinierte Klasse verwenden. Sie können auch einen anonymen Typ verwenden, aber dies ist ein fortgeschrittenes Konzept, von dem Sie sich wahrscheinlich fernhalten möchten.

Also, um Ihre Sammlung eines dieser Elemente hinzuzufügen, die Sie gerade tun:

myCollection.Add(myNewLogElement); 

durch diese Sammlung Schleife, die Sie tun:

foreach (MyLogElementType logElement in myCollection 
{ 
    ' do something... 
} 

Ich hoffe, das hilft. Wenn Sie eine bessere Antwort benötigen, müssen Sie genauer bestimmen, was Sie tun.

Viel Glück.

1

Ich fange an zu sagen, dass die objektorientierten Antworten besser sind ... aber Sie haben nach der einfachsten Lösung gefragt.

zunächst eine neue Kollektion machen:

List<string> log = new List<string>(); 

Wenn Sie etwas wollen log:

log.Add(string.Format("Date = {0}, String = {1}, Boolean = {3}, and an integer = {4}", theDate, theString, theBool, theInt); 

Dann am Ende:

foreach(string logEntry in log) Console.WriteLine(logEntry); 
0

mehr von 3,0 auszubeuten.

public class GameRound{ 
    public DateTime Date { get; set; } 
    public String Name { get; set; } 
    public Boolean DidCheat { get; set; } 

    public void Print() 
    { 
     Console.WriteLine(String.Format("Date:{0}, Name:{1}, Cheated: {2}", Date, Name, DidCheat)); 
    } 
} 

public class GameRounds : List<GameRound>{ 
    public void Add(DateTime date, string name, bool didCheat) { 
       this.Add(new GameRound { Date = date, Name = name, DidCheat = didCheat }); 
    } 
} 

public static void Play(){ 
      var gameRounds = new GameRounds(); 
      //Round 1 
      gameRounds.Add(DateTime.Today, "ABC", false); 
      //Round 2 
      gameRounds.Add(DateTime.Today, "DEF", true); 

      //Print 
      foreach (var gameRound in gameRounds) 
      { 
       gameRound.Print(); 
      } 
}