0

我想做一个分数列表。此外,孩子的名字也应该保存在该列表中。将分数和名称添加到列表后,对列表进行排序,使最低分数成为列表中的第一个条目。但我总是收到此错误消息:

使用泛型类型“System.Collections.Generic.List”需要 1 个类型参数

怎么了?不能将姓名和分数存储在一个列表中吗?我应该改变什么?

SpriteFont Scores;
Random random = new Random();
List<string> NamesList = new List<string>();
List<string,int> NamesAndPointsList = new List<string,int>();

protected override void LoadContent()
{
  spriteBatch = new SpriteBatch(GraphicsDevice);
  Scores = Content.Load<SpriteFont>("Arial");

  NamesList.Add("Veronica");
  NamesList.Add("Michael");
  NamesList.Add("Christina");

  for (int j = 0; j <= NamesList.Count - 1; j++)
  {
    int Points = random.Next(101);
    NamesAndPointsList.Add(NamesList[j],Points);
  }
  NamesAndPointsList.Sort();
}
protected override void Draw(GameTime gameTime)
{
  GraphicsDevice.Clear(Color.CornflowerBlue);
  spriteBatch.DrawString(Scores, NamesAndPointsList[0].ToString() + ";" + NamesAndPointsList[1].ToString() + ";" + NamesAndPointsList[2].ToString(), new Vector2(200, 200), Color.White);

        base.Draw(gameTime);
}
4

2 回答 2

4

定义是 List ,它确实需要一个类型。

但是是什么阻止您定义该类型?

public struct User
{
   public string Name { get; set;}
   public int Score { get; set;}
}

var users = List<User>();

或者如果您不想定义类

var users = List<Tuple<string, int>>();

但是,如果您只是想要一个可以容纳多种类型实例的列表,那么没有什么可以阻止您使用“ArrayList”或对象列表。尽管我会避免这种情况。

于 2013-04-20T18:25:34.003 回答
2

您可以使用 a Tuple,创建您自己的Object,或使用Dictionary,这非常适合您尝试做的事情。与 a 相比,A在这种情况下Dictionary更好地List工作,因为它可以轻松执行查找。

Dictionary类型提供了带有键的快速查找以获取值。有了它,我们可以使用任何类型的键和值,包括整数和字符串。

Dictionary<string,int> Users = new Dictionary<string,int>();

基本上,作为 a的Keystring是用户名,作为 an的Valueint是分数。

要添加新用户,您可以这样做

 Users.Add("Michael",0); //Create new user named Michael, who starts with 0 points

现在你可能想得到迈克尔分数,你可以通过这样做快速找到它

 int Score = Users["Michael"];

我也不认为需要一个NamesNameAndPoints列表,你可以只使用一个。

于 2013-04-20T20:20:24.033 回答