在函数之间传递值 - 对象引用未设置为对象的实例
本文关键字:设置 对象 实例 对象引用 之间 函数 | 更新日期: 2023-09-27 18:35:29
我正在尝试用 c# 制作一个上大学的程序。我应该做一个窘术,并保存每个运动员的体重、身高、姓名、代码和 BMI。我不知道这个人会向程序添加多少运动员,但数组必须动态增加,我不能浪费不必要的内存。
我想出了这个:(按钮 1 显示运动员,按钮 2 添加他们。
public partial class Form1 : Form
{
int numeroDeAtletas = 1;
Atleta[] atletas;
public struct Atleta
{
public string nomes;
public int codigos;
public double altura;
public double peso;
public double IMC;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < (numeroDeAtletas-1); i++)
{
MessageBox.Show("Nome : " + atletas[i].nomes + Environment.NewLine + "Código: " + atletas[i].codigos + Environment.NewLine + "Peso: " + atletas[i].peso + Environment.NewLine + "Altura: " + atletas[i].altura + Environment.NewLine + "Indíce de massa corporal: " + atletas[i].IMC, "Atleta " + (i+1), MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void button2_Click(object sender, EventArgs e)
{
Atleta[] atletas = new Atleta[numeroDeAtletas];
atletas[numeroDeAtletas - 1].nomes = txtName.Text;
atletas[numeroDeAtletas - 1].codigos = Convert.ToInt32(txtCode.Text);
atletas[numeroDeAtletas - 1].peso = Convert.ToDouble(txtWeight.Text);
atletas[numeroDeAtletas - 1].altura = Convert.ToDouble(txtHeight.Text);
AtletasMng atletasmng = new AtletasMng (Convert.ToInt32(txtCode.Text),txtName.Text, Convert.ToDouble(txtWeight.Text), Convert.ToDouble(txtHeight.Text));
atletas[numeroDeAtletas - 1].IMC = atletasmng.calcularIMC();
MessageBox.Show("Atleta número " + (numeroDeAtletas) + " adicionado com sucesso!");
numeroDeAtletas++;
if (numeroDeAtletas >= 2)
{
button1.Enabled = true;
}
}
}
但是当我单击按钮 1 时,它说"对象引用未设置为对象的实例",我认为这是因为该行:
Atleta[] atletas = new Atleta[numeroDeAtletas];
声明未传递给 button1_Click() 函数的局部变量。那么,我如何在此功能之间传递值呢?
每次按下按钮 2 时,您都会删除现有的竞技
Atleta[] atletas = new Atleta[numeroDeAtletas];
但是,如果numeroDeAtletas
(例如)是 3,则仅评估数组的最后一条记录,其他记录为空!
为了您的目的,我建议您使用列表。
将Atleta[] atletas;
替换为List<Atleta> atletas= new List<Atleta>();
每次单击Button2时,您都可以这样做
atletas.Add(new Atleta{option1="test", option2="test"});
在这种情况下,您应该使用 List。
在类中声明一个类型为 Atleta
的List
,然后使用它,正如您所说,项目的数量是动态的而不是固定的:
在类中添加一个类型为 List<Atleta>
的字段:
List<Atleta> atletas = new List<Atleta>();
在按钮上,单击添加以按以下方式列出:
Atleta atleta = new Atleta();
atleta.nomes = txtName.Text;
atleta.codigos = Convert.ToInt32(txtCode.Text);
atleta .peso = Convert.ToDouble(txtWeight.Text);
atleta.altura = Convert.ToDouble(txtHeight.Text);
...................
...................
...................
atletas.Add(Atleta);