是否可以在一个列表中存储字符串和int?

时间:2013-04-20 18:20:33

标签: c# xna

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

  

使用泛型类型'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);
}

2 个答案:

答案 0 :(得分: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`或对象列表..虽然我会避免这种情况。

答案 1 :(得分:2)

您可以使用Tuple,创建自己的Object,或使用Dictionary,这是您尝试做的最佳选择。与Dictionary相比,List在这种情况下会更好地 ,因为它可以轻松执行查找。

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

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

基本上,string是用户名,int是得分。

要添加新用户,您可以执行此操作

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

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

 int Score = Users["Michael"];

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