Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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
C# 数组不会将其值保留在其填充的方法之外_C# - Fatal编程技术网

C# 数组不会将其值保留在其填充的方法之外

C# 数组不会将其值保留在其填充的方法之外,c#,C#,我有一行代码,它获取一个表的ID并将它们提供给一个int数组,称为idPuntos注意:这个方法夹在其他地方的Open和Close方法之间,所以从这个意义上讲,它与数据库无关 public void refreshIds() { idInit.Clear(); try { SqlCommand getIds = new SqlCommand("SELECT id_punto FROM Punt

我有一行代码,它获取一个表的ID并将它们提供给一个int数组,称为idPuntos注意:这个方法夹在其他地方的Open和Close方法之间,所以从这个意义上讲,它与数据库无关

    public void refreshIds()
        {
        idInit.Clear();
        try
            {
            SqlCommand getIds = new SqlCommand("SELECT id_punto FROM Puntos", cnn);
            SqlDataReader idsReader = getIds.ExecuteReader();
            while (idsReader.Read())
                {
                //idInit is a global ArrayList
                idInit.Add(idsReader[0]);

                }
            //idPuntos is a global array, declared without value
            idPuntos = (int[])idInit.ToArray(typeof(int));
            //This line works here, I test printed it and got the values I wanted, yet it doesn't work in the following method...
            bajaId = idPuntos[0];

            }
        catch (SqlException)
            {
            statusbajas.Text = "Hubo un error al recuperar los datos.";
            }

        }
这里不行:

    private void listabajas_SelectedIndexChanged(object sender, EventArgs e)
        {
        //it doesnt work here, and i dont understand why
        bajaId = idPuntos[0];
        //statusbajas.Text = "es " + listabajas.SelectedIndex.ToString();
        }
有什么想法吗

编辑:通过不工作,我的意思是IdPantos[0]看起来是空的,而它不在第一个字段中,在第一个字段中它实际上保存了我提供给它的值

编辑2:问题似乎始于构造函数。在第一次关闭调用时设置断点,使我意识到从那时起崩溃就发生了

这是我的构造器:

    public AltasPuntos()
        {
        InitializeComponent();
        str = Properties.Settings.Default.SWMConnString;
        cnn = new SqlConnection(str);
        cnn.Open();
        refreshListNombres();
        cnn.Close();
        cnn.Open();
        refreshIds();
        cnn.Close();   
        }
您需要确保在触发listabajas_SelectedIndexChanged之前调用RefreshID

如果您使用的是WinForms,则可以在窗体的构造函数中调用RefreshID


从问题中提供的信息来看,这差不多就是我能给出的建议。

请准确解释什么不起作用。对不起,在第二种方法中,idPuntos[0]似乎为空,在第一个实例中,它确实保存了我提供给它的值。在数组初始化或数组位于另一个实例之前,您正在调用listabajas_SelectedIndexChanged。将断点放在bajaId=idPuntos[0]上;行并检查您的IDPentos是否已初始化。这是一个ASP.NET WebForms应用程序吗?它是一个WindowsFormsApplication、.NET Framework 4.5,使用C。顺便说一句,所有变量都是全局变量。能否在数组初始化之前调用listabajas_SelectedIndexChanged?我在开始时在表单加载时运行refreshIds方法,不确定listabajas_SelectedIndexChanged是否作为设计项在默认情况下被调用。我将调用移动到构造函数,但它仍然表示IndexChanged方法中的值为null。您是否在其他任何地方调用refreshIds?如果使用不返回任何内容的查询调用IDPTO[0],它可能会变为null。你能在refreshIds中的bajaId=IdPantos[0]上设置一个断点并查看它何时被击中吗?我设置了断点,它肯定会首先调用listabajas\u SelectedIndexChanged,因为它在断点之前停止。我想我应该先找到调用RefreshID的方法?listabajas_SelectedIndexChanged不能在表单的构造函数之前调用。这是不可能的。您可以在构造函数中放置断点,然后查看执行顺序。我在构造函数中放置了一个断点,在其中调用RefreshID,它仍然会将我发送到listabajas\u SelectedIndexChanged。