Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t向列表中添加值(计数始终为1)-C#_C#_Visual Studio_List - Fatal编程技术网

Can';t向列表中添加值(计数始终为1)-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;

很多时候,我不得不创建结构列表来将数据存储在C#中。但这一次,我遇到了一个问题,我似乎无法向列表中添加值。我不太明白为什么,因为我已经做过类似的项目,但如果有人能帮助我,我将不胜感激

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);
            }
       }