Can';t向列表中添加值(计数始终为1)-C#
很多时候,我不得不创建结构列表来将数据存储在C#中。但这一次,我遇到了一个问题,我似乎无法向列表中添加值。我不太明白为什么,因为我已经做过类似的项目,但如果有人能帮助我,我将不胜感激Can';t向列表中添加值(计数始终为1)-C#,c#,visual-studio,list,C#,Visual Studio,List,很多时候,我不得不创建结构列表来将数据存储在C#中。但这一次,我遇到了一个问题,我似乎无法向列表中添加值。我不太明白为什么,因为我已经做过类似的项目,但如果有人能帮助我,我将不胜感激 class mng { int day = 0; List<Despesas> dias = new List<Despesas>(); public struct Despesas { public double transportes;
class mng
{
int day = 0;
List<Despesas> dias = new List<Despesas>();
public struct Despesas
{
public double transportes;
public double agua;
}
public mng ()
{
}
public void addValues(double transportes, double agua)
{
Despesas dia = new Despesas();
try
{
dia.transportes = transportes;
}
catch
{
MessageBox.Show("Error", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try
{
dia.agua = agua;
}
catch
{
MessageBox.Show("Error", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try
{
dias.Add(dia);
}
catch
{
MessageBox.Show("Error", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
MessageBox.Show("Added: " + dias.Count);
day++;
}
在重载构造函数上,我有一条消息显示每次添加新值时列表值的计数,猜测值总是1,我只是不明白为什么
这个项目与我做过的其他类似项目唯一不同的是,这个项目有两种形式,我认为这与我的问题无关
在重载构造函数上,我有一条消息显示每次添加新值时列表值的计数,猜测值总是1,我只是不明白为什么
这是因为每次创建mng
的新实例时(顺便说一句,应该给它一个更有意义和传统的名称),您都在创建一个新的列表,该列表一开始是空的。您正在向其中添加一项,因此计数为1
如果您想在mng
的多个实例之间共享一个列表,您可能应该将dias
变量设为静态(在这种情况下,它与任何特定实例都不关联),或者可以将引用传递给构造函数
或者,也许您根本不想创建mng
的新实例-也许您应该在现有实例上调用一个方法?没有更多的上下文,很难知道
作为补充说明,我强烈建议您避免使用公共字段和可变结构(您的Despesas
类型)
在重载构造函数上,我有一条消息显示每次添加新值时列表值的计数,猜测值总是1,我只是不明白为什么
这是因为每次创建mng
的新实例时(顺便说一句,应该给它一个更有意义和传统的名称),您都在创建一个新的列表,该列表一开始是空的。您正在向其中添加一项,因此计数为1
如果您想在mng
的多个实例之间共享一个列表,您可能应该将dias
变量设为静态(在这种情况下,它与任何特定实例都不关联),或者可以将引用传递给构造函数
或者,也许您根本不想创建mng
的新实例-也许您应该在现有实例上调用一个方法?没有更多的上下文,很难知道
作为旁注,我强烈建议您避免使用公共字段和可变结构(您的
Despesas
类型)。您每次都要创建一个新的mng。所以白天总是零度。它是静态的(跨所有类)还是不创建新的MNG?还有,为什么会有这么多相同的捕捉块?你每次都要创建一个新的mng。所以白天总是零度。它是静态的(跨所有类)还是不创建新的MNG?还有,为什么会有这么多相同的catch块呢?我的目标是从另一个类调用一个方法。所以我总是做一些事情,比如Class1 myClass=newclass1();myClass.function()@MiguelPT:但是您想在新实例上调用该方法吗?或者您想在现有实例上调用它,例如,您以前向其中添加了其他值的实例?当你想要创建新的对象时,听起来你真的需要考虑所涉及的对象。请看我更新的代码。我只想从表单1中的文本框中读取transportes和agua的值,并将这些值传递给另一个类。因此,在Form1上,我调用一个方法“addValues”,将它们的值传递给另一个类并添加到列表中。@MiguelPT:edit将构造函数更改为方法-但在调用该方法之前,您仍在创建一个新实例。。。那么,你怎么能期望计数超过一个呢?同样,我们并不知道您想要实现什么——在您添加了价值之后,您没有对实例做任何事情。(你还需要处理你的异常处理-你的代码现在到处都是try/catch块,这使得它比需要的复杂得多。)耶稣,谢谢你,对不起,但是来自objective-C和C,我实际上在学习C#时遇到了麻烦……与其他两个太不一样了,我期待更多的相似之处:sMy的目标是从另一个类调用一个方法。所以我总是做一些事情,比如Class1 myClass=newclass1();myClass.function()@MiguelPT:但是您想在新实例上调用该方法吗?或者您想在现有实例上调用它,例如,您以前向其中添加了其他值的实例?当你想要创建新的对象时,听起来你真的需要考虑所涉及的对象。请看我更新的代码。我只想从表单1中的文本框中读取transportes和agua的值,并将这些值传递给另一个类。因此,在Form1上,我调用一个方法“addValues”,将它们的值传递给另一个类并添加到列表中。@MiguelPT:edit将构造函数更改为方法-但在调用该方法之前,您仍在创建一个新实例。。。那么,你怎么能期望计数超过一个呢?同样,我们并不知道您想要实现什么——在您添加了价值之后,您没有对实例做任何事情。(你还需要处理你的异常处理-你的代码现在到处都是try/catch块,这使得它比需要的复杂得多。)耶稣,谢谢你,对不起,但是来自objective-C和C,我实际上在学习C#时遇到了麻烦……与其他两个太不一样了,我期待更多的相似之处:s
private void button1_Click(object sender, EventArgs e)
{
try{
double transportes = Convert.ToDouble(txtTransportes.Text);
double agua = Convert.ToDouble(txtAgua.Text);
mng mngV = new mng();
mngV.addValues(transportes, agua);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}