Вопрос о коллекциях (.NET 3.5, C #)

2

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

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

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

Теги:
collections
.net-3.5

5 ответов

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, Вы печатаете безумно быстро.
  • 4
    У меня высокоскоростное сетевое соединение с моим мозгом. Я вообще не печатаю.
Показать ещё 10 комментариев
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
    Правильно, это в значительной степени дословно то, над чем я все еще работал, печатая;)
  • 0
    +1 для: так как вы используете языковые функции C # 3, такие как автоматические свойства, также можно использовать конструктор именованных свойств.
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();
            }
 }
0

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

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

myCollection.Add(myNewLogElement);

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

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

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

Удачи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню