2009-07-23 65 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 2009-07-23 21:25:08

+4

我有一个高速网络连接到我的大脑。我根本不打字。 – 2009-07-23 21:27:24

+0

+1在问题出现之前,您一定已经准备好了这个答案; o) – 2009-07-23 21:27:32

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对象,并设置所有的属性值。请记住用日期等替换正确的名称/值。

最后,生成报表,试试这个:

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 2009-07-23 21:31:55

+0

+1:因为你使用C#3语言功能,比如自动属性,不妨使用命名的属性构造函数。 – maxwellb 2009-07-23 21:44:56

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(); 
      } 
}