我想做一个分数列表。此外,孩子的名字也应保存在该列表中。将分数和名称添加到列表后,将对列表进行排序,以使得最低分数是列表中的第一个条目。但我总是收到此错误消息:
使用泛型类型'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);
}
答案 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"];
我也认为不需要Names
和NameAndPoints
列表,您只需使用一个。