在c#应用程序中存储多个生成的变量值
在第一篇文章中,我对C#和编程基本上都是新手 我正在制作一个足球运动员生成器应用程序,仅用于练习,其中我有一个带有构造函数的类,该类生成一个包含两个字符串(firstname和lastname)和大量int的对象。(不同的技能属性,如射门能力、传球等) 耐心点,我马上就发布我的代码 所以我希望我制作的所有这些对象都以某种方式与其所有变量一起存储。在大量的谷歌搜索之后,我开始使用不同种类的数组、列表和字典 首先,这是我的课:在c#应用程序中存储多个生成的变量值,c#,C#,在第一篇文章中,我对C#和编程基本上都是新手 我正在制作一个足球运动员生成器应用程序,仅用于练习,其中我有一个带有构造函数的类,该类生成一个包含两个字符串(firstname和lastname)和大量int的对象。(不同的技能属性,如射门能力、传球等) 耐心点,我马上就发布我的代码 所以我希望我制作的所有这些对象都以某种方式与其所有变量一起存储。在大量的谷歌搜索之后,我开始使用不同种类的数组、列表和字典 首先,这是我的课: class player { public string fi
class player
{
public string firstName;
public string lastName;
public string playPos;
public int playerId = 999;
public int isKeeper;
public int level;
public int age;
public int dKeeper;
public int dTackle;
public int dMarking;
public int mPlaymaking;
public int mCrossing;
public int fShooting;
public int fShotPower;
public int aDribbling;
public int aHeading;
public int aPassing;
public void autoGenPlayer()
{
//new killing random that i got off of Stack Overflow
Random rAG = new Random(Guid.NewGuid().GetHashCode());
//PlayerId, dont mind it does not work properly yet.
playerId = playerId + 1;
//a level integer just to base the other stats around, to keep the stats from spreading too much
level = rAG.Next(2, 11);
//Generating names, calling the methods a bit lower in this class.
firstName = firstNameGenerator();
lastName = lastNameGenerator();
//giving the player an age
age = rAG.Next(16, 35);
//a one out of seven chance to become a goal keeper.
isKeeper = rAG.Next(1,8);
//skills based on level. Max value is 20
dTackle = rAG.Next(level, level * 2);
dMarking = rAG.Next(level, level * 2);
mPlaymaking = rAG.Next(level, level * 2);
mCrossing = rAG.Next(level, level * 2);
fShooting = rAG.Next(level, level * 2);
fShotPower = rAG.Next(level, level * 2);
aDribbling = rAG.Next(level, level * 2);
aHeading = rAG.Next(level, level * 2);
aPassing = rAG.Next(level, level * 2);
//Checks if the player is a keeper. 5 is chosen at random. There are obv better ways to do this, but it doesnt matter right now.
if (isKeeper == 5)
{
//This basically just makes the keeper a keeper, and a shit outfield player.
dKeeper = rAG.Next(level, level * 2);
playPos = "Goal Keeper";
dTackle = rAG.Next(1, 3);
dMarking = rAG.Next(1, 3);
mPlaymaking = rAG.Next(1, 3);
mCrossing = rAG.Next(1, 3);
fShooting = rAG.Next(1, 3);
fShotPower = rAG.Next(1, 3);
aDribbling = rAG.Next(1, 3);
aHeading = rAG.Next(1, 3);
aPassing = rAG.Next(1, 3);
}
else
{
//if not a keeper, shit keeper attributes, and random outfielder atts.
dKeeper = 1;
}
//my clever way of assigning a player position to the players.
int def = dTackle + dMarking;
int mid = mCrossing + mPlaymaking;
int fwd = fShooting + fShotPower;
if (dKeeper > 1)
{
playPos = "Goal Keeper";
}
else if (def >= fwd && def >= mid)
{
playPos = "Defender";
}
else if (mid >= fwd && mid >= def)
{
playPos = "Midfielder";
}
else if (fwd >= mid && fwd >= def)
{
playPos = "Striker";
}
else
{
//in a rare case (if ever) the logic doesnt add ut, im spawning a star player. because. im not too got at this.
playPos = "Utility Legend";
dTackle = rAG.Next(16, 21);
dMarking = rAG.Next(16, 21);
mPlaymaking = rAG.Next(16, 21);
mCrossing = rAG.Next(16, 21);
fShooting = rAG.Next(16, 21);
fShotPower = rAG.Next(16, 21);
aDribbling = rAG.Next(16, 21);
aHeading = rAG.Next(16, 21);
aPassing = rAG.Next(16, 21);
}
}
//Generates a first name
public string firstNameGenerator()
{
string returnfirstName;
string[] firstnames;
firstnames = new string[60] { "60 different strings of first names... took them out for you, becasue it looked bad in the editor." };
Random rF = new Random(Guid.NewGuid().GetHashCode());
returnfirstName = firstnames[rF.Next(0, 40)];
return returnfirstName;
}
//generates a last name
public string lastNameGenerator()
{
string returnlastName;
string[] lastnames;
lastnames = new string[60] { "60 different strings of lastnames........." };
Random rL = new Random(Guid.NewGuid().GetHashCode());
returnlastName = lastnames[rL.Next(0, 40)];
returnlastName = lastnames[rL.Next(0, 40)];
return returnlastName;
}
}
现在是我的另一个代码,你知道的-你把所有东西放在一起的部分
namespace FormManager
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
player p = new player();
p.autoGenPlayer();
textBox10.Text = p.firstName + " " + p.lastName;
textBox11.Text = p.age.ToString();
textBox1.Text = p.aPassing.ToString();
textBox2.Text = p.aDribbling.ToString();
textBox3.Text = p.aHeading.ToString();
textBox4.Text = p.dTackle.ToString();
textBox5.Text = p.dMarking.ToString();
textBox6.Text = p.fShooting.ToString();
textBox7.Text = p.fShotPower.ToString();
textBox8.Text = p.mPlaymaking.ToString();
textBox9.Text = p.mCrossing.ToString();
textBox12.Text = p.dKeeper.ToString();
textBox13.Text = p.playPos;
}
private void button2_Click(object sender, EventArgs e)
{
//number of objects to generate
int numberOfPlayersToGenerate = 10;
string[] savePlayers = new string[numberOfPlayersToGenerate];
//Generate many objects
for (int i = 0; i < numberOfPlayersToGenerate; i++)
{
player play = new player();
play.autoGenPlayer();
}
}
}
}
名称空间表单管理器
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
玩家p=新玩家();
p、 自生播放器();
textBox10.Text=p.firstName+“”+p.lastName;
textBox11.Text=p.age.ToString();
textBox1.Text=p.aPassing.ToString();
textBox2.Text=p.aDribbling.ToString();
textBox3.Text=p.aHeading.ToString();
textBox4.Text=p.dTackle.ToString();
textBox5.Text=p.dMarking.ToString();
textBox6.Text=p.fShooting.ToString();
textBox7.Text=p.fShotPower.ToString();
textBox8.Text=p.mPlaymaking.ToString();
textBox9.Text=p.mCrossing.ToString();
textBox12.Text=p.dKeeper.ToString();
textBox13.Text=p.playPos;
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
//要生成的对象数
int numberOfPlayersToGenerate=10;
string[]savePlayers=新字符串[NumberOfPlayerToGenerate];
//生成许多对象
for(int i=0;i
所以这里基本上是for循环,我想用它来存储所有生成的变量。
autoGenPlayer()方法正在生成大量不同的int和string值,我想将它们全部存储起来,这样我就可以制作一个好看的表格来显示它
我很喜欢这方面的任何想法,它现在让我发疯。在表格1中,只需添加
List<Player> players = new List<Player>();
在按钮2中单击()
然后,您可以将gridview添加到表单中,并使玩家成为数据源-FIN
并非如此-
如果您不知道如何设置数据源
- 鳍
- 欢迎来到社区
实际上,你有比你所提到的三个选项多得多的选择
要想正确理解这一点,你需要理解
如果您希望将此“组”绑定到,则它必须是将采用的类型。查看文档,这是system.object类型(没有太多帮助,因为所有内容都继承自system.object)。但是,如果您进一步阅读,将有一个特定对象的列表(所有对象都以“数据”开头)以及实现IListSource或IList接口的任何组件
使所有这些都适用的是,所有这些都实现了接口
那么你应该用哪一种呢
为您提供了使用IList接口本身的充分理由。这样您就只对使用您的数据的人施加了最小的限制。具体来说,在您的情况下,它应该是IList(播放器)(或者更好的是IList(IPlayer))并创建播放器实现的IPlayer接口)
<内部存储> Player(播放器),因为它是无界的(不像数组),并且没有字典键的开销(你似乎不想在这个名字中查找玩家——如果这是你想做的事情,那么考虑把名字作为字典中的关键字)
另外,如果您将autoGenPlayer更改为,则不需要使用
play.autoGenPlayer();
line问题是什么?for循环正在生成许多对象,我希望每个对象都存储在数组、列表或字典中,这样我就可以查看生成的“记录”稍后在datagrid、listview或任何其他合适的方式中。我将列表放在Form1()中,但从玩家那里得到错误1名称“玩家”在当前上下文中不存在。添加(播放)?公共部分类Form1:Form{private list players=new list();public Form1(){InitializeComponent();}将它添加到类form1中,而不是构造函数:)非常感谢。这只是因为我是一个新手。我非常感谢你!我非常感谢你在这方面的贡献。我仍在努力让它工作,所以我现在将开始阅读你提供的所有文档。
players.add(p);
players.add(play);