2009-07-23 2 views
2

Я застрял, и мне нужна помощь. В любом случае у меня есть консольная программа Visual Studio 2008, для которой нужно записывать дату, строку, логическое и целое число для каждого раунда игры. Скажите, что пользователь играет 10 раундов, у меня было бы по 10 штук.Вопрос о коллекциях (.NET 3.5, C#)

Я хочу сохранить эти записи в структуре данных (коллекция, которую я считаю), а затем после того, как игра закончена, через них производится простой консольный отчет.

Я застрял. Это похоже на простую вещь, но я не могу найти решение. Я предполагаю, что есть несколько способов сделать это, но я ищу наиболее простое решение.

ответ

9

Редактировать: Я хотел упростить ответ на этот вопрос, но, возможно, я слишком упростил его. Я изменил измененную структуру ниже (это плохая идея, спасибо, что напомнил мне @Jon Skeet), с классом и свойствами.


Во-первых, создать тип данных для хранения информации:

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

Затем создать список, чтобы держать его:

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

Тогда для каждого раунда, построить значение с круглые информационные данные и добавить их в список:

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

Переберите:

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

+1, Вы набираете безумно быстро. – Brandon

+4

У меня скоростное сетевое подключение к моему мозгу. Я вообще не печатаю. –

+0

+1 У вас должен был быть готов этот ответ до того, как возник вопрос: o) –

3

Попробуйте это:

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

В одной части, с правильными именами переменных.

Затем в вашей консоли программы, добавьте следующую строку в верхней части:

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

Это делает «список» раундов, которые могут быть добавлены к, удалены, и «зацикленной» через.

Затем, когда вы хотите добавить раунд, используйте следующий код:

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

Это делает новый объект GameRound, и устанавливает все свойства значений. Не забудьте заменить DATE и т. Д. На правильные имена/значения.

Наконец, для получения отчета, попробуйте следующее:

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

Правильно, это в значительной степени слово в слово, что я все еще работал над тем, чтобы набирать;) – Thorarin

+0

+1 для: поскольку вы используете языковые функции C# 3, такие как автоматические свойства, также можете использовать именованный конструктор свойств. – maxwellb

0

Я думаю, вы должны быть немного более конкретными относительно того, что вы пытаетесь сделать. Как правило, вам понадобится структура данных для хранения данных Date, String, Boolean и Integer. Для этого вы можете использовать Struct или пользовательский класс. Вы также можете использовать анонимный тип, но это расширенная концепция, которую вы, вероятно, хотите избегать.

Таким образом, чтобы добавить один из этих элементов в вашей коллекции, вы просто сделать:

myCollection.Add(myNewLogElement); 

Чтобы перебрать эту коллекцию, вы делаете:

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

Я надеюсь, что это помогает. Если вам нужен лучший ответ, вам нужно быть более конкретным относительно того, что вы делаете.

Удачи.

1

Начну с того, что объектно-ориентированные ответы лучше ... но вы просили простейшее решение.

Сначала сделайте новую коллекцию:

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

Если вы хотите войти что-то:

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

Тогда в конце:

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

Эксплуатируя больше 3,0.

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(); 
      } 
} 
Смежные вопросы